You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"))
)

注意事项

  1. 已创建表的处理:如果之前已经执行create_all创建了表,需要先删除原有表,或者用Alembic等迁移工具修改表结构,create_all不会自动更新已有表的约束。
  2. 数据库兼容性:不同数据库的时间函数有差异,比如PostgreSQL可用text("NOW()"),MySQL用text("CURRENT_TIMESTAMP"),根据你的数据库类型调整即可。

内容的提问来源于stack exchange,提问作者souleater2003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:06:18