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 迁移数据(生成数据库表)与 查询数据的更多相关文章

  1. 利用Factory-boy和sqlalchemy来批量生成数据库表数据

    测试过程中免不了要构造测试数据,如果是单条数据,还比较简单,但如果是批量数据,就比较麻烦了. 最近看到Factory_boy这个python第三方库,它通过SQLAlchemyModelFactory ...

  2. Oracle sqlldr 在DOS窗口导入多列数据到数据库表

    sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...

  3. (3)PyCharm中Flask工程逆向生成数据库表

    一.创建数据库 在mysql数据库中创建名为"movie"的数据库. 二.安装SQLAlchemy 三.安装PyMySQL 四.创建数据模型 在app/models.py中编写数据 ...

  4. EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的

    我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...

  5. Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'

    Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete' 一.分析 在 ...

  6. hibernate笔记--通过SchemaExport生成数据库表

    方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可 ...

  7. 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

      先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...

  8. (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

    (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREA ...

  9. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  10. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

随机推荐

  1. A-04 坐标轴下降法

    目录 坐标轴下降法 一.坐标轴下降法流程 二.坐标轴下降法和梯度下降法的异同 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:http ...

  2. 深入了解opacity和rgba

    1. rgba 首先它是一个属性值,语法为rgba(r,g,b,a) - r为红色值, 正整数 | 百分数 - g为绿色值,正整数 | 百分数 - b为蓝色值,正整数 | 百分数 - a为alpha( ...

  3. Git版本控制之ubuntu搭建Git服务器

    Git是一个开源的分布式版本控制系统,可以有效.高效的处理从很小到非常大的项目版本管理.使得开发者可以通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库,也可以将代码提交到Git服务 ...

  4. 【THE LAST TIME】this:call、apply、bind

    前言 The last time, I have learned [THE LAST TIME]一直是我想写的一个系列,旨在厚积薄发,重温前端. 也是给自己的查缺补漏和技术分享. 欢迎大家多多评论指点 ...

  5. 【DP合集】背包 bound

    N 种物品,第 i 种物品有 s i 个,单个重量为 w i ,单个价值为 v i .现有一个限重为 W 的背包,求能容 纳的物品的最大总价值. Input 输入第一行二个整数 N , W ( N ≤ ...

  6. Cocos2d-x入门之旅[2]精灵

    精灵就是cocos是屏幕上移动的对象,能被我们控制,比如我们HelloWorld场景的这个图片就是精灵(Sprite) 怎么才算精灵?你能控制它的,就是一个精灵,否则就只是一个节点(Node) 准确的 ...

  7. Faker——生成测试数据的PHP类库

    工作上用的是TP框架,每次测试功能的时候都要手动添加测试数据,词穷起名总是起一些test1.test2这种low到爆炸的用户名,这让我很难受.稍微翻阅了一些资料,发现laravel有一个生成测试数据的 ...

  8. PHP stream_wrapper_register

    <?php /** * 引用:http://php.net/manual/en/function.stream-wrapper-register.php * 把变量当成文件读写的协议 * * C ...

  9. opencv::模板匹配(Template Match)

    模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域. 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从 ...

  10. python学习-并发编程(十四)

    14.2线程的创建与启动 import threading # 定义一个普通的action函数,该函数准备作为线程执行体 def action(max): for i in range(max): p ...