源码
app.py
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
class Config:
SQLALCHEMY_DATABASE_URI = 'sqlite:///test.db'
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
Migrate(app=app, db=db)
class Test(db.Model):
id = db.Column(db.Integer, primary_key=True)
a = db.Column(db.String(32), default='aaa')
b = db.Column(db.Integer, default=1)
c = db.Column(db.Boolean, default=True)
bb = db.Column(db.Integer, server_default=text('1'))
cc = db.Column(db.Boolean, server_default=text('True'))
if __name__ == '__main__':
app.run()
- flask db init
- flask db migrate
- flask db upgrade
结果
-- auto-generated definition
create table test
(
id INTEGER not null
primary key,
a VARCHAR(32),
b INTEGER,
c BOOLEAN,
aa VARCHAR(32) default 'aaa',
bb INTEGER default 1,
cc BOOLEAN default True,
check (c IN (0, 1)),
check (cc IN (0, 1))
);
结果分析
- a, b, c三个字段
DDL
中并没有生成默认值 - aa, bb, cc三个字段
DDL
中生成了对应的默认值 default
使用sqlalchemy
客户端在插入数据时将默认值传递给数据库server_default
则使用数据库来产生默认值
注意:
server_default
仅支持字符串,整型或者布尔型需要使用text
函数转换