SQLAlchemy的应用创建
Posted 被嫌弃的胖子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLAlchemy的应用创建相关的知识,希望对你有一定的参考价值。
1.首先创建app文件夹
同django 创建app 一样 创建文件
在创建的views中写入两个蓝图函数为了操作数据库的增删改查
acc.py
from flask import Blueprint acc = Blueprint("acc",__name__) @acc.route("/acc") def acc_func(): return "这是acc蓝图页面"
在__init__.py下写入create_app()函数
from flask import Flask from app.views.acc import acc from app.views.user import user from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() session=db.session def create_app(): my_app =Flask(__name__) my_app.register_blueprint(acc) my_app.register_blueprint(user) return my_app if __name__ == \'__main__\': app=create_app() app.run()
若运行成功,就完成重要的第一步了
第二步创建数据库表名
在models.py 内创建数据
from app import db class User(db.Model): __tablename__ ="user" __table_args__ = {"useexisting":True} id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) if __name__ == \'__main__\': from app import create_app my_app = create_app() db.drop_all(app=my_app) db.create_all(app=my_app)
观察发现没有engine可以连接数据库
解决 :在__init__下写为
from flask import Flask from app.views.acc import acc from app.views.user import user from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() session=db.session def create_app(): my_app =Flask(__name__) my_app.config["SQLALCHEMY_DATABASE_URI"]="mysql+pymysql://root:@127.0.0.1:3306/day128?charset=utf8" # SQLALCHEMY_POOL_SIZE 配置 SQLAlchemy 的连接池大小 my_app.config["SQLALCHEMY_POOL_SIZE"] = 5 # SQLALCHEMY_POOL_TIMEOUT 配置 SQLAlchemy 的连接超时时间 my_app.config["SQLALCHEMY_POOL_TIMEOUT"] = 15 my_app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False db.init_app(my_app) my_app.register_blueprint(acc) my_app.register_blueprint(user) return my_app
db=db = SQLAlchemy() db.model 相当于 Base()
这个时候就会发现数据库增加一张user表
第三部 进行数据的增添
在创建的user.py蓝图中,进行操作
from flask import Blueprint,jsonify user = Blueprint("user",__name__) @user.route("/user") def user_func(): from app.models import User from app import db user_obj = User(name="zq") db.session.add(user_obj) db.session.commit() return "这是user蓝图" @user.route("/user_list") def user_list(): from app.models import User res = User.query.first() ret ={"username":res.name} return jsonify(ret)
为了仿照django,在manager.py进行启动
这里用到了装饰器
from flask_script import Manager
@manager.command
import MyApp # 导入 Flask-Script 中的 Manager from flask_script import Manager app = MyApp.create_app() # 让app支持 Manager manager = Manager(app) if __name__ == \'__main__\': #app.run() # 替换原有的app.run(),然后大功告成了 manager.run() MyApp/manager.py
Manager的两种用法
@manager.command def runflask(): my_app.run() return "成功"
#第一种就是通过终端启动程序,输入python manager.py runflask
#即可运行经过@manager.command 装饰的函数,就这相当于在终端启动了程序
同django的python manager.py runserver
@manager.option("-n","--name",dest="name") def run_flask(name="127.0.0.7",say="5000"): a=input("真的启动me?") if a==\'y\': my_app.run(name,int(say)) else: return f"{name}真{say}"
#第二种装饰器@manager.opation("-短指令","--长指令",dest="变量名")
# 输入python manager.py run_flask
即可以进行传参的装饰器
如下详解
@manager.option("-n","--name",dest="name")
import MyApp # 导入 Flask-Script 中的 Manager from flask_script import Manager app = MyApp.create_app() # 让app支持 Manager manager = Manager(app) # type:Manager @manager.command def DragonFire(arg): print(arg) @manager.option("-n","--name",dest="name") @manager.option("-s","--say",dest="say") def talk(name,say): print(f"{name}你可真{say}") if __name__ == \'__main__\': #app.run() # 替换原有的app.run(),然后大功告成了 manager.run() MyApp/manager.py
通过上述例子了解到可以进行 my_app.run(name,int(say))
前后输入 "127.0.0.1" 5000 即可
第四步 Migrate进行数据库迁移
在manager.py引用
from flask_migrate import Migrate,MigrateCommand
举例
import MyApp # 导入 Flask-Script 中的 Manager from flask_script import Manager # 导入 Flask-Migrate 中的 Migrate 和 MigrateCommand # 这两个东西说白了就是想在 Flask-Script 中添加几个命令和指令而已 from flask_migrate import Migrate,MigrateCommand app = MyApp.create_app() # 让app支持 Manager manager = Manager(app) # type:Manager # Migrate 既然是数据库迁移,那么就得告诉他数据库在哪里 # 并且告诉他要支持那个app Migrate(app,MyApp.db) # 现在就要告诉manager 有新的指令了,这个新指令在MigrateCommand 中存着呢 manager.add_command("db",MigrateCommand) # 当你的命令中出现 db 指令,则去MigrateCommand中寻找对应关系 """ 数据库迁移指令: python manager.py db init python manager.py db migrate # Django中的 makemigration python manager.py db upgrade # Django中的 migrate """ @manager.command def DragonFire(arg): print(arg) @manager.option("-n","--name",dest="name") @manager.option("-s","--say",dest="say") def talk(name,say): print(f"{name}你可真{say}") if __name__ == \'__main__\': #app.run() # 替换原有的app.run(),然后大功告成了 manager.run() MyApp/manager.py
我的manage.py
import app from flask_script import Manager from flask_migrate import Migrate,MigrateCommand my_app = app.create_app() manager=Manager(my_app) from app import db Migrate(my_app,db) manager.add_command("database",MigrateCommand) @manager.command def runflask(): my_app.run() return "成功" @manager.option("-n","--name",dest="name") def run_flask(name="127.0.0.7",say="5000"): a=input("真的启动me?") if a==\'y\': my_app.run(name,int(say)) else: return f"{name}真{say}" if __name__ == \'__main__\': manager.run()
在终端输入
python manager.py database init python manager.py database migrate python manager.py database migrated
以上是关于SQLAlchemy的应用创建的主要内容,如果未能解决你的问题,请参考以下文章
python orm框架SQLAlchemy简单应用(数据库操作)
from flask_sqlalchemy import SQLAlchemy 无法创建数据库表,代码无报错,代码如下,python版本是3.5