列默认值持久保存到表中

hyp*_*ean 8 python sqlalchemy

我目前正在使用Column具有以下签名的:

Column('my_column', DateTime, default=datetime.datetime.utcnow)

我试图弄清楚如何改变它,以便能够做vanilla sql inserts(INSERT INTO ...)而不是通过sqlalchemy.基本上我想知道如何在表上保持默认值而不会失去将列设置为当前utc时间的功能.

我使用的数据库是PostgreSQL.

Mar*_*eth 16

SQLAlchemy有多种方法可以定义如何在插入/更新时设置值.您可以在文档中查看它们.

你现在这样做的方式(default为列定义一个参数)只会影响SQLAlchemy生成插入语句的时间.在这种情况下,它将调用可调用函数(在您的情况下,datetime.datetime.utcnow函数)并使用该值.

但是,如果您要直接运行SQL代码,则此函数将永远不会运行,因为您将完全绕过SQLAlchemy.

您可能想要做的是使用SQLAlchemy 的服务器端默认功能.

请尝试使用此代码:

from sqlalchemy.sql import func
...
Column('my_column', DateTime, server_default=func.current_timestamp())
Run Code Online (Sandbox Code Playgroud)

SQLAlchemy现在应生成一个表,该表将使数据库自动将当前日期插入到my_column列中.这样做的原因是现在默认情况下正在数据库端使用,因此您不再需要SQLAlchemy作为默认值.

注意:我认为这实际上会插入本地时间(而不是UTC).但是,希望你可以从这里找出其余部分.