2012-03-14 107 views
27

我想設置一個基於SQLAlchemy模型中另一個表的列默認值。在sqlalchemy中設置默認值

目前我有這樣的:

Column('version', Integer, default=1) 

我需要的是(大約)這樣的:

Column('version', Integer, default="SELECT MAX(1, MAX(old_versions)) FROM version_table") 

我如何在SQLAlchemy中實現這一點?

回答

25

documentation給出default以下可能性:

的標量,Python的可調用,或ClauseElement表示否則未指定此 柱爲此列,這將在插入件要調用的默認 值在插入的VALUES子句中。

您可以使用一個簡單的函數來研究,或者您可以只使用一個select() object

from sqlalchemy.sql import select, func 
... 
Column('version', Integer, default=select([func.max(1, 
    func.max(version_table.c.old_versions))])) 
+1

我知道的能力,但由於某種原因,我似乎無法制定:

在你的情況,可能沿東西線_right_查詢。如果你能提供他們,我會喜歡一些細節。 – 2012-03-14 17:14:06

+0

@ChrisR:用示例更新了答案。 – voithos 2012-03-14 17:22:52

+0

這真的很接近......但在version_table中沒有記錄的情況下,max()返回NULL。 – 2012-03-14 19:32:15

0

你想server_default

Column('version', Integer, server_default="SELECT MAX(1, MAX(old_versions)) FROM version_table")