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