使用SQLAlchemy将列更新为默认值

3
我想更新mysql数据库中的一行,并使用该列的默认值。我试图实现这个功能:
session.query(TableName).update({'column1': None,
                            'column2': None,
                            'column3': None}, False)

但是它没有起作用。有什么想法吗?
2个回答

2
如果您在服务器上设置了默认值,以下内容应该可以完成任务:
session.query(TableName).update({'column1': sa.text('default'),
                                 'column2': sa.text('default'),
                                 'column3': sa.text('default')}, False)

0

要将值设置为默认值,列必须已经设置为NOT NULL(在SQLAlchemy中为nullable=False)并且具有DEFAULT。这可以在数据库级别或在定义数据库结构时完成。

在更新查询中,如果将该值设置为NULL(或在Python中为None),则它将获得默认设置。(对于MySQL来说是正确的,不确定SQLAlchemy是否会干预。)

要将现有列更新为NOT NULL并给它们设置默认值,请参见这些 SO 问题


能否在不要求该列为NOT NULL的情况下实现这一点? - jminardi
@jminardi 不行。如果列是可为空的,那么默认值永远不会被使用。在这种情况下,你必须明确地将行更新为默认值,就像其他答案中所示。 - aneroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接