SQLAlchemy创建表时指定默认值未生效问题求助
解决SQLAlchemy创建表时默认值不生效的问题
你当前用的default是SQLAlchemy的ORM层面默认值,仅在通过ORM插入数据且未指定字段时自动填充,不会把默认值写入数据库表的结构约束(即DDL层面的DEFAULT)。要让数据库表本身带默认值约束,得改用server_default参数。
修改后的表结构代码
from sqlalchemy import Table, Column, Integer, String, DateTime, text from sqlalchemy.sql import metadata users = Table( "users", metadata, Column("id", Integer, primary_key=True), Column("username", String(32), unique=True), Column("password", String(64)), # 整数类型的server_default传字符串形式的默认值 Column("games_all", Integer, server_default="0"), Column("games_won", Integer, server_default="0"), # 日期时间类型用text包裹数据库原生函数,适配不同数据库 Column("created_at", DateTime, server_default=text("CURRENT_TIMESTAMP")) )
注意事项
- 已创建表的处理:如果之前已经执行
create_all创建了表,需要先删除原有表,或者用Alembic等迁移工具修改表结构,create_all不会自动更新已有表的约束。 - 数据库兼容性:不同数据库的时间函数有差异,比如PostgreSQL可用
text("NOW()"),MySQL用text("CURRENT_TIMESTAMP"),根据你的数据库类型调整即可。
内容的提问来源于stack exchange,提问作者souleater2003
相关产品推荐
相关产品推荐

