在sqlalchemy中设置默认值

Chr*_*s R 37 python sqlalchemy

我想设置一个基于SQLAlchemy模型中另一个表的列默认值.

目前我有这个:

Column('version', Integer, default=1)
Run Code Online (Sandbox Code Playgroud)

我需要的是(大致)这个:

Column('version', Integer, default="SELECT MAX(1, MAX(old_versions)) FROM version_table")
Run Code Online (Sandbox Code Playgroud)

我如何在SQLAlchemy中实现它?

voi*_*hos 35

文档提供了以下可能性default:

标量,Python可调用或ClauseElement,表示此列的默认值,如果在插入的VALUES子句中未指定此列,则将在插入时调用.

您可以考虑使用一个简单的函数,或者您可以只使用一个select()对象.

在你的情况下,可能有以下几点:

from sqlalchemy.sql import select, func
...
Column('version', Integer, default=select([func.max(1,
    func.max(version_table.c.old_versions))]))
Run Code Online (Sandbox Code Playgroud)

  • @ChrisR:使用`func.coalesce`怎么样?像`func.coalesce(func.max(version_table ...), - 默认值这里 - )`?但是,我还没有测试过这段代码. (2认同)

mar*_*mnl 6

您想要server_default

Column('version', Integer, server_default="SELECT MAX(1, MAX(old_versions)) FROM version_table")
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法修改它以过滤用作插入部分的值?例如,`select max(...) from table where table.some_field=some_value`?some_value 是要插入的值之一。编辑:遗憾的是,看起来不行,postgres 不允许这样做:“该值是任何无变量表达式(特别是,不允许交叉引用当前表中的其他列)。也不允许子查询。” (2认同)