1、 flask sqlalchemy 集成的两种方式
# 1、 通过flask app初始化
from flask_sqlalchemy import SQLAlchemy
flask_db = SQLAlchemy()
from flask import Flask
app = Flask(__name__)
app.config.from_object('flaskconfig')
flask_db.init_app(app)
#flask_db db操作
# 2、 通过flask app初始化
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
flask_db = SQLAlchemy(app)
#flask_db db操作
2、 通过flask-sqlacodegen命令,从数据库结构生成model类文件
1) 命令执行
cmd = "flask-sqlacodegen --outfile models.py --flask "+ MYSQL_DATABASE_URI
os.system(cmd)
2) 文件查看
from sqlalchemy import BigInteger, Column, DateTime, String
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class TcDemo(db.Model):
__tablename__ = 'tc_demo'
id = db.Column(db.BigInteger, primary_key=True, info='ID')
name = db.Column(db.String(100, 'utf8_general_ci'), nullable=False, unique=True, info='名称')
desc = db.Column(_db.String(200), info='描述')
create_time = db.Column(db.DateTime, nullable=False)
update_time = db.Column(db.DateTime, nullable=False)
从以上文件可以注意一些点:
#1 文件类名,是数据库表的 tc_demo以驼峰方式转成的 TcDemo
#2 数据库字段类型对应关系,参见附录表1
#3 数据库特殊关键词约束对应关系,参见附录表2
MYSQL类型名 | python中类型 | 说明 |
---|---|---|
Integer | int | 普通整数,一般是32位 |
SmallInteger | int | 取值范围小的整数,一般是16位 |
BigInteger | int或long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | decimal.Decimal |
String | str | 变长字符串 |
Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长Unicode字符串 |
UnicodeText | unicode | 变长Unicode字符串,对较长或不限长度的字符串做了优化 |
Boolean | bool | 布尔值 |
Date | datetime.date | 时间 |
Time | datetime.datetime | 日期和时间 |
LargeBinary | str | 二进制文件 |
来源: https://blog.youkuaiyun.com/weixin_41896508/article/details/80772238 |
选项名 | 说明 |
primary_key | 如果为True,代表表的主键;缺省为False |
unique | 如果为True,代表这列不允许出现重复的值 注: 索引导出的model类也会设置这个属性 |
index | 如果为True,为这列创建索引,提高查询效率 注: 数据库表字段有索引时,不会自动变成index属性 |
nullable | 如果为True,允许有空值,如果为False,不允许有空值 |
default | 为这列定义默认值 |
来源: https://blog.youkuaiyun.com/weixin_41896508/article/details/80772238 |