flask-sqlalchemy使用,flask-migrate使用

发布时间 2023-04-11 16:37:12作者: 小王应该在学习!

flask-sqlalchemy使用,flask-migrate使用

flask-sqlalchemy使用

集成到flask中,我们可以用sqlalchemy来做,就是比较的繁琐
现在有一个第三方的flask-sqlalchemy,可以快速的集成到flask中

# 使用flask-sqlalchemy集成
1.下载flask-sqlalchemy   # pip install flask-sqlalchemy
2.导入flask-sqlalchemy   # from flask-sqlalchemy improt SQLAlchemy
3.实例化得到对象          # db = SQLAlchemy()
4.视图函数中使用session   # 全局的session
5.在py文件中继承Model     # db.Model
6.写入字段                # useranem= db.Column(db.String(80),unique=True,nullable=False)
7.在配置文件中加入         # SQLALCHEMY_DATABASE_URI = create_engine("mysql+pymysql://root@127.0.0.1:3306/aaa")
					    # SQLALCHEMY_POOL_SIZE = 5
                          #  SQLALCHEMY_POOL_TIMEOUT = 30
                          #  SQLALCHEMY_POOL_RECYCLE = -1
                          # 追踪对象的修改并且发送信号
                          #  SQLALCHEMY_TRACK_MODIFICATIONS = False

py文件

from flask import Flask
# from flask_sqlalchemy improt SQLAlchemy
from flask_sqlalchemy import SQLAlchemy


app=Flask(__name__)
app.config.from_pyfile('settings.py')
# 实例化得到对象
db = SQLAlchemy()
# 将db注册到app中
db.init_app(app)

@app.route('/')
def index():
    from models import Book
    db.session.add(Book(name='xxxxx'))
    db.session.commit()
    return '增加成功'

if __name__ == '__main__':
    app.run()

settings.py

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123@127.0.0.1:3306/ddd"
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
# 追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False

model.py

from manage import db
class Book(db.Model):
    __tablename__ = 'books'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))

flask-migrate使用

# 表发生变化,都会有记录的,自动同步到数据库中的
原生的sqlalchemy,不支持修改表的
flask-migrate可以实现类似于django的表迁移,将数据同步到数据库中
# django中表迁移
python manage.py makemigrations
python manage.py migrate
# 使用步骤
 flask:2.2.2   flask-script:2.0.3  
1 第一步:安装,依赖于flask-script
    pip3.8 install flask-migrate==2.7.0
2 在app所在的py文件中
    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand
    manager = Manager(app)
    Migrate(app, db)
    manager.add_command('db', MigrateCommand) 

    manager.run() # 以后使用python manage.py runserver 启动项目

3 以后第一次执行一下
    python manage.py db init  # 生成一个migrations文件夹,里面以后不要动,记录迁移的编号

4 以后在models.py 写表,加字段,删字段,改参数

5 只需要执行
    python manage.py db migrate  # 记录
    python manage.py db upgrade  # 真正的同步进去
"""
     python3 manage.py db init   只执行一次,初始化的时候使用  会在项目路径下生成migrations文件夹,用来管理表变化
     python3 manage.py db migrate  等同于django的makemigrations,只是做个记录
     python3 manage.py db upgrade  等同于django的migrate把变化同步到数据库中
"""

manage.py

from sansa import create_app
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from sansa import db

app = create_app()
# flask-script的使用
# 第一步:初始化出flask_script的manage
manager = Manager(app)
# 第二步:使用flask_migrate的Migrate  包裹一下app和db(sqlalchemy对象)
Migrate(app, db)

# 第三步:把命令增加到flask-script中去
manager.add_command('db', MigrateCommand)  # 多出三个命令 init  migrate  upgrade
# python manage.py upgrade
if __name__ == '__main__':
    # app.run()
    manager.run()

model.py

from . import db
# 第三步:把db导入,直接继承db.Model

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 '<User %s>' % self.username

setttings.py

class BaseConfig(object):

    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root@127.0.0.1:3306/ddd?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 5
    SQLALCHEMY_POOL_TIMEOUT = 30
    SQLALCHEMY_POOL_RECYCLE = -1
    # 追踪对象的修改并且发送信号
    SQLALCHEMY_TRACK_MODIFICATIONS = False