Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlalchemy不会为MSSQL GETDATE()服务器默认值发出正确的SQL_Python_Sql Server_Sqlalchemy - Fatal编程技术网

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

Python Sqlalchemy不会为MSSQL GETDATE()服务器默认值发出正确的SQL,python,sql-server,sqlalchemy,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(引擎)会导致为系统_时间戳发出以下SQL: [SYSTEM_TIMESTAMP] DATETIME NOT NULL DEF

我有以下声明性SQL类:

class Test(Base):
    ID = Column(Integer, primary_key=True)
    SYSTEM_TIMESTAMP = Column(DateTime, nullable=False, server_default='GETDATE()')
但是使用Base.metadata.create_all(引擎)会导致为系统_时间戳发出以下SQL:

[SYSTEM_TIMESTAMP] DATETIME NOT NULL DEFAULT 'GETDATE()',
GETDATE应如何从中发出的示例:

我尝试使用func.getdate而不是“getdate()”作为服务器默认值,但出现以下错误:

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'>'
ArgumentError:参数“arg”应为“”或“”类型之一
”“或者
'',
得到“
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(),
这里记录了这一点:

[SYSTEM_TIMESTAMP] DATETIME NOT NULL DEFAULT GETDATE(),