flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3974字,纯文字阅读大概需要6分钟。
内容图文
![flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据](/upload/InfoBanner/zyjiaocheng/883/0ff40e7be96d4e908f751af4e503b9b8.jpg)
1, 生成表
db.Model主要用于数据库的增删改查操作, 构建表交给db.Table完成
安装 pip install flask-migrate
from datetime import datetime from flask_sqlalchemy import SQLAlchemy from sqlalchemy.dialects.mysql import TINYINT, BIGINT, VARCHAR, CHAR, DATETIME, INTEGER # 使用原生sqlalchemy创建字段 app = create_app() # 创建数据库连接对象 db = SQLAlchemy(app) # 构建表 t_user = db.Table('user_basic', db.Column('user_id', BIGINT(10, unsigned=True), nullable=False, primary_key=True, autoincrement=True, comment='主键'), db.Column('status', TINYINT(1), nullable=False, default=1, comment="状态"), # db.Column('status1', TINYINT(1), nullable=False, default=1, comment="状态1"), db.Column('mobile', CHAR(11), nullable=False, unique=True, comment='手机号'), db.Column('create_time', DATETIME, nullable=False, default=datetime.now, comment='创建时间'), db.Column('update_time', DATETIME, nullable=False, default=datetime.now, onupdate=datetime.now, comment='更新时间'), # 注意: 如果有外键, 定义方式和普通字段一样, 可以添加索引提高性能 # db.Column('leader_id', BIGINT(10, unsigned=True), default=0, comment='上级的id', index=True), mysql_engine='MyISAM', mysql_charset='utf8mb4') if __name__ == '__main__': db.drop_all() db.create_all() #调用create_all()能找到对应的db.Tabke然后生成表
注释:逻辑外键添加index = True,生成外键,查询速度快
2,数据增删查改的模型:
from datetime import datetime from flask_sqlalchemy import SQLAlchemy def create_app(): #在其他地方封装的 app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/sqlalchemy_test?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False return app app = create_app() # 为了避免和创建表的db产生冲突, 创建专门用于数据操作的SQLAlchemy对象 model_db = SQLAlchemy(app) class User(model_db.Model): # db.Model主要用于数据的增删改查, 构建表交给db.Table去完成 __tablename__ = 'user_basic' # 由于模型不用于建表, 所以类型不需要设置的很严谨, 并可以省略大部分字段细节(除了default参数) user_id = model_db.Column(model_db.Integer, primary_key=True) status = model_db.Column(model_db.Integer, default=1) mobile = model_db.Column(model_db.String(11)) create_time = model_db.Column(model_db.DateTime, default=datetime.now) update_time = model_db.Column(model_db.DateTime, default=datetime.now) @app.route('/') def index(): user1 = User() user1.mobile = '18912341234' model_db.session.add(user1) model_db.session.commit() return 'index' if __name__ == '__main__': app.run(debug=True)
注释:建表时如果字段中有default字段时,查询等操作的模型类也要写,不写会报错
2,迁移数据, 添加
当数据库升级,如增加字段,修改字段类型等,(删除外键等)
![flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据 - 文章图片](/upload/getfiles/0001/2021/5/8/20210508113458093.jpg)
![flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据 - 文章图片](/upload/getfiles/0001/2021/5/8/20210508113458213.jpg)
from datetime import datetime from flask_sqlalchemy import SQLAlchemy from sqlalchemy.dialects.mysql import TINYINT, BIGINT, VARCHAR, CHAR, DATETIME, INTEGER from tool import create_app from flask_migrate import Migrate app = create_app() # 创建数据库连接对象 db = SQLAlchemy(app) # 初始化迁移器 Migrate(app, db) # 构建表 t_user = db.Table('user_basic', db.Column('user_id', BIGINT(10, unsigned=True), nullable=False, primary_key=True, autoincrement=True, comment='主键'), db.Column('status', TINYINT(1), nullable=False, default=1, comment="状态"), # db.Column('status1', TINYINT(1), nullable=False, default=1, comment="状态1"), db.Column('mobile', CHAR(11), nullable=False, unique=True, comment='手机号'), db.Column('create_time', DATETIME, nullable=False, default=datetime.now, comment='创建时间'), db.Column('update_time', DATETIME, nullable=False, default=datetime.now, onupdate=datetime.now, comment='更新时间'), # 注意: 如果有外键, 定义方式和普通字段一样, 可以添加索引提高性能 # db.Column('leader_id', BIGINT(10, unsigned=True), default=0, comment='上级的id', index=True), mysql_engine='MyISAM', mysql_charset='utf8mb4') if __name__ == '__main__': # db.drop_all() # db.create_all() passView Code
修改好后执行步骤,如果是已经改过,可以只执行最后两步
1,export FLASK_APP = init_db.py #指定文件夹
2,flask db init #生成migrations 文件 (迁移文件)
3,flask db migrate 生成版本文件 查看是否有变化 versions 多了一个文件 (修改的地方)
4,flask db upgrade
内容总结
以上是互联网集市为您收集整理的flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据全部内容,希望文章能够帮你解决flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。