flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据
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 = ''
model_db.session.add(user1)
model_db.session.commit()
return 'index' if __name__ == '__main__':
app.run(debug=True)
注释:建表时如果字段中有default字段时,查询等操作的模型类也要写,不写会报错
2,迁移数据, 添加
当数据库升级,如增加字段,修改字段类型等,(删除外键等)

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()
pass
修改好后执行步骤,如果是已经改过,可以只执行最后两步
1,export FLASK_APP = init_db.py #指定文件夹
2,flask db init #生成migrations 文件 (迁移文件)
3,flask db migrate 生成版本文件 查看是否有变化 versions 多了一个文件 (修改的地方)
4,flask db upgrade
flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据的更多相关文章
- 利用Factory-boy和sqlalchemy来批量生成数据库表数据
测试过程中免不了要构造测试数据,如果是单条数据,还比较简单,但如果是批量数据,就比较麻烦了. 最近看到Factory_boy这个python第三方库,它通过SQLAlchemyModelFactory ...
- Oracle sqlldr 在DOS窗口导入多列数据到数据库表
sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...
- (3)PyCharm中Flask工程逆向生成数据库表
一.创建数据库 在mysql数据库中创建名为"movie"的数据库. 二.安装SQLAlchemy 三.安装PyMySQL 四.创建数据模型 在app/models.py中编写数据 ...
- EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...
- Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'
Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete' 一.分析 在 ...
- hibernate笔记--通过SchemaExport生成数据库表
方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可 ...
- 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
先看一下我要实现的功能界面: 这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREA ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
随机推荐
- python编程基础之十三
列表的通用操作: list1 = [43, 65, 76, 6] list2 = [45, 77, 90, 11, 2, 4, 66] print(list1+ list2) # 列表组合 prin ...
- e课表项目第二次冲刺周期第九天
昨天完成了什么? 昨天,我查找了相关的资料,将数据库根据我们的课程信息进行了重新的设计,并将数据能够连上数据库,即在添加课程的界面,可以将添加的课程的信息,存储到数据库中,并且存储到课程表中,并注明是 ...
- 【CJOJ】为了博多
Description 做了个噩梦,梦见我的 n 把刀到60级会二次变身,变成一个 对推6图有xi点贡献,刷大阪城有yi点贡献 的刀,于是要把刀分成两队一队刷大阪城另一队推6图 . 但是有m对兄弟刀在 ...
- 渗透-N种反弹shell方法
简介 reverse shell反弹shell或者说反向shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端.reverse shell与teln ...
- javascript 对象和字符串互转
Object => String : console.log(JSON.stringify(e)); String => Object : JSON.parse(str)
- PHP array_udiff_uassoc
1.函数的参数:返回数组的差集.用定义的函数比较键值和值. 2.函数的参数: @params array $array @params array $array1 ... @params callab ...
- 使用Prometheus监控SpringBoot应用
通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用.(本文以SpringBoot 2.1.9.REL ...
- 生产环境中利用软链接避免"rm -rf /"的方法
1.将系统中的rm二进制文件重命名为rm_real:2.编写脚本rm_shell,rm_shell中主要包含以下内容: 2.1)路径转换模块,用于将rm_shell参数中的路径转换为绝对路径 ...
- Electron开发跨平台桌面程序入门教程
最近一直在学习 Electron 开发桌面应用程序,在尝试了 java swing 和 FXjava 后,感叹还是 Electron 开发桌面应用上手最快.我会在这一篇文章中实现一个HelloWord ...
- 数据结构c语言
这篇博客是为了对数据结构进行一系列的学习整理,包括线性表,栈和队列,串,数组和广义表,树和二叉树,图,动态储存管理,查找,内部排序,外部排序文件进行部分笔记的记录. 基本概念和术语 数据:是对客观事物 ...