flask生成数据mysql_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,迁移数据,  添加

当数据库升级,如增加字段,修改字段类型等,(删除外键等)

b34011998c0f9cdf1464fd6b5fe08945.png

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

利用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 ...

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( ...

随机推荐

ScrollView左右约束的坑

问题:因为要适配iPad,有些页面拉伸会很难看,需要适配成下图样子,但是按照比例调整了ScrollView左右间距之后出现左右可以滑动,设置contentSize的X为0 不起作用,   之后多番尝试 ...

ie F12开发工具出不来

IE的F12开发人员工具不显示问题: 按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的 ...

【解决】U盘装系统(Win7/Win8)& 装双系统

作为一名计算机的学生,不会装系统是不是会被笑掉大牙?!! .. 我一直就不太会(不是不会,是不熟练) .. 所以今天闲着没事,把旧电脑捣鼓起来 .. 主要是为了熟悉U盘装系统和装双系统的步骤 .. 基 ...

使用xshell出现乱码

用xshell链接Linux出现乱码: 解决方法: 先查看Linux支持的字符类型是否为如下类型 如果是,则找到菜单中的文件选项,并在选项中找到属性: 单击属性选项,找到终端,将编码设置为UTF-8: ...

SQLite数据转换成sql server数据

需要将SQLite数据库里的数据导入到SQL Server,在网上搜了好久,没有找到一个方便实用的方法. 经过本人的细心琢磨实验,终于让我给找到一好的方法:使用CSV文件作为介质来做转换.现在记录下来 ...

[BZOJ]1045 圆上的整点(HAOI2008)

数学题第二弹! Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 一个正整数r. Output 整点个数. Sample Input 4 ...

Python常用数据类型

一 .列表 name = ['zhangshan', 'lishi', 'wangwu']# 列表赋值 name.append('liujun')# 增,默认增加到最后位置 name.insert(1 ...

memset赋值

比较神奇的事情 可能和二进制有关系吧 #include using namespace std; ]; int main(){ memset(f,,sizeo ...

CDOJ 1965 连通域统计【DFS】

求连通域个数,简单题 #include using namespace std; const int INF = 0x3f3f3f3f; typedef l ...

BugkuCTF ---游戏过关 writeup

下载程序后发现是输入1-8数字中的一位 至于怎么玩,我到现在都没弄懂 不多说,直接拖入Ollydbg 搜索 分析了一下字符串,发现有一个显示flag的字符串 双击过去看看,发现类似于一个函数. 接下来 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值