我使用pydoc从sql数据库中获取数据。
我想使用WHERE语句来筛选日期。我有:
cursor.execute("SELECT isnull(SOP30200.SOPNUMBE,''), isnull(SOP30200.docdate,'') from SOP30200 where SOP30200.docdate > datetime.datetime(2015,1,1,0,0)")
我得到错误:
ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot find either column "datetime" or the user-defined function or aggregate "datetime.datetime", or the name is ambiguous. (4121) (SQLExecDirectW)')
在没有WHERE语句的情况下,我成功地获取了数据。我确实检查了"docdate"字段的类型,它是datetime.datetime.
EDIT:还应指出,提取的日期的格式为datetime.datetime(2013, 5, 8, 0, 0)
您需要使用参数注入/插值日期。SQL server正尝试按原样运行SQL语句,并希望数据库中存在datetime.datetime(..)
函数。
cursor.execute("SELECT isnull(SOP30200.SOPNUMBE,''), isnull(SOP30200.docdate,'') from SOP30200 where SOP30200.docdate > ?", datetime.datetime(2015,1,1,0,0))
请参阅http://mkleehammer.github.io/pyodbc/-参数部分
"datetime.datetime"不是SQL函数,是Python标准库的类。
可能是:
cursor.execute("SELECT isnull(SOP30200.SOPNUMBE,''), isnull(SOP30200.docdate,'') from SOP30200 where SOP30200.docdate > ?", datetime.datetime(2015,1,1,0,0))