我目前正在使用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).但是,希望你可以从这里找出其余部分.
| 归档时间: |
|
| 查看次数: |
4213 次 |
| 最近记录: |