python - Sqlalchemy 不会为 MSSQL GETDATE() 服务器默认发出正确的 SQL

标签 python sql-server sqlalchemy

我有以下声明性 SQL 类:

class Test(Base):
    ID = Column(Integer, primary_key=True)
    SYSTEM_TIMESTAMP = Column(DateTime, nullable=False, server_default='GETDATE()')

但是使用 Base.metadata.create_all(engine) 会导致针对 SYSTEM_TIMESTAMP 发出以下 SQL:

[SYSTEM_TIMESTAMP] DATETIME NOT NULL DEFAULT 'GETDATE()',

如何从 http://www.w3schools.com/sql/func_getdate.asp 发出 GETDATE 的示例:

OrderDate datetime NOT NULL DEFAULT GETDATE()

我尝试使用 func.getdate 而不是 'GETDATE()' 作为 server_default,但出现以下错误:

ArgumentError: Argument 'arg' is expected to be one of type '<type 'basestring'>' or
 '<class 'sqlalchemy.sql.expression.  ClauseElement'>' or
 '<class 'sqlalchemy.sql.expression.TextClause'>',
  got '<class 'sqlalchemy.sql.expression._FunctionGenerator'>'

SQLAlchemy 版本:0.9.6 Pyodbc版本:3.0.5 Python版本:2.7

如何让 SQLAlchemy 发出正确的 SQL 以设置服务器默认值?

最佳答案

解决方案是使用 SQLAlchemy 的 text() 函数定义服务器默认值:

import sqlalchemy as sa
...
SYSTEM_TIMESTAMP = Column(DateTime, nullable=False, server_default=sa.text("GETDATE()"))

这将正确地发出服务器默认值:

[SYSTEM_TIMESTAMP] DATETIME NOT NULL DEFAULT GETDATE(),

这记录在此处:http://docs.sqlalchemy.org/en/latest/core/defaults.html#server-side-defaults

关于python - Sqlalchemy 不会为 MSSQL GETDATE() 服务器默认发出正确的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24401109/

相关文章:

sql - 跟踪单个 SQL Server 数据库的所有登录

sql-server - sql :need to change constraint on rename table?

python - 如何在 SQLAlchemy 中设置 MySQL SET 的 server_default?

python - SQLAlchemy 关联困惑

python - 在sqlalchemy中强制内部加入多对多关系

python - 推荐系统 - 基于 Softmax 的深度神经网络模型中的用户嵌入

python - 是否有 Python 函数来计算 2 个矩阵之间的最小 L2 范数直至列置换?

SQL [转换为 bool 值]

python - 传递参数后如何在模板中的元素中创建id?

python - 在Python中结合readline()和for循环而不使用next()