flask-flask-sqlalchemy、flask-migrate使用
1.flask-sqlalchemy使用
1.使用原生sqlalchemy写接口:只要一访问根目录,就会添加这本书
from flask import Flask
from settings import session
from models import Book
app = Flask(__name__)
@app.route('/')
def index():
'''数据暂时写死,后期可以动态添加'''
session.add(Book(name='三国演义'))
session.commit()
session.close()
return '增加成功'
if __name__ == '__main__':
app.run()
models.py:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class Book(Base):
__tablename__ = 'books'
id = Column(Integer,primary_key=True)
name = Column(String(32))
sqlalchemy11.py:
from flask import Flask
from settings import session
from models import Book
app = Flask(__name__)
@app.route('/')
def index():
session.add(Book(name='三国演义'))
session.commit()
session.close()
return '增加成功'
if __name__ == '__main__':
app.run()
2.使用flask_sqlalchemy继承到flask,这种方法可以将session封装到db对象中,这样db对象中的session和全局的session不会产生错乱:
managepy
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('settings.py')
# 1.实例化得到对象
db = SQLAlchemy()
# 2.将db注册到app中
db.init_app(app)
@app.route('/')
def index():
from models import Book
# 3.视图函数中使用session
db.session.add(Book(name='红楼梦'))
db.session.commit()
return '增加成功'
if __name__ == '__main__':
app.run()
models.py:
from sqlalchemy.ext.declarative import declarative_base
from manage import db
Base = declarative_base()
'''需要继承db.Model'''
class Book(db.Model):
__tablename__ = 'books'
'''字段类型也需要从db对象中点'''
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(32))
settings.py
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/aaa?charset=utf8"
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
# 追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False
2.flask-migrate使用
原生的sqlalchemy不支持修改表。flask-migrate可以实现类似于django的数据库迁移命令:
django中的两步命令:
python manage.py makemigrations # 记录数据库变化
python manage.py migrate # 真正将数据同步到数据库
通过flask-migrate我们在flask中也可以实现类似于django中的两步操作:
使用步骤:
1.安装flask-sc2023-04-11 19:58:20 星期二ript
pip3.8 install flask-migrate==2.7.0
# flask-migrate版本:2.7.0
# flask-script版本:2.0.3
# flask版本:2.2.2
2.项目代码:
src/views/account.py:
from flask import Blueprint
from .. import db
from .. import models
account = Blueprint('account',__name__)
@account.route('/login')
def register():
db.session.add(models.Users(username='max',email='1@qq.com'))
return 'register'
src/init.py:
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
# 1.得到db对象
db = SQLAlchemy()
from .models import *
from .views import account
def create_app():
app = Flask(__name__)
app.config.from_object('settings.DevelopmentConfig')
# 2.将db注册到app中
db.init_app(app)
# 注册蓝图
app.register_blueprint(account.account)
return app
src/models.py:
from . import db
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return self.username
manage.py:
from src import create_app,db
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
app = create_app()
manager = Manager(app)
Migrate(app,db)
manager.add_command('db',MigrateCommand)
if __name__ == '__main__':
manager.run()
settings.py:
class BaseConfig(object):
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/aaa?charset=utf8"
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
# 追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False
class ProductionConfig(BaseConfig):
pass
class DevelopmentConfig(BaseConfig):
'''开发的配置类'''
pass
class TestingConfig(BaseConfig):
pass
目录结构:
因为有了manager.add_command('db',MigrateCommand)这句代码,可以释放出三个命令:
python manage.py db init # 最开始的时候执行一下就可以,执行完毕会生成一个migrations的文件,里面以后不要动,记录迁移的编号
python manage.py db migrate # 记录同步记录
python manage.py db upgrade # 将迁移记录同步到表中,创建表
如果我们需要对表进行修改,修改之后只需要执行:
python manage.py db migrate # 记录同步记录
python manage.py db upgrade # 将迁移记录同步到表中,创建表
表中的字段修改即可更新,使用flask-migrate可以完美地解决flask表不能修改的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律