如何在pyODBC查询中参数化日期戳?

2024-09-20 23:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用^{}^{}一起构造ODBC查询。在

插入日期戳参数时遇到问题。在这里您可以看到从文本版本(1)到字符串格式版本(2)到错误状态版本的升级。(注意DateFrom&;DateTo):

  1. sql = "sp_report ProfitAndLossStandard show Amount_Title, Text, Label, Amount parameters DateFrom = {d'2018-02-12'}, DateTo = {d'2018-02-18'}, SummarizeColumnsBy='TotalOnly', ReturnRows='All'"

  2. sql = "sp_report ProfitAndLossStandard show Amount_Title, Text, Label, Amount parameters DateFrom = %s, DateTo = %s, SummarizeColumnsBy='TotalOnly', ReturnRows='All'" % (q_startdate, q_enddate)

随后尝试使用插入语法?cursor.execute(sql, (q_startdate), (q_enddate))和变量:

q_startdate = ("{d'%s'}" % dates[0])
q_enddate = ("{d'%s'}" % dates[1])
  1. sql = "sp_report ProfitAndLossStandard show Amount_Title, Text, Label, Amount parameters DateFrom = ?, DateTo = ?, SummarizeColumnsBy='TotalOnly', ReturnRows='All'"

>>> ('HY004', '[HY004] [Microsoft][ODBC Driver Manager] SQL data type out of range (0) (SQLBindParameter)')

^{pr2}$
  1. sql = "sp_report ProfitAndLossStandard show Amount_Title, Text, Label, Amount parameters DateFrom = {d'?'}, DateTo = {d'?'}, SummarizeColumnsBy='TotalOnly', ReturnRows='All'"

>>> ('42000', "[42000] [QODBC] [sql syntax error] Expected lexical element not found: = {d'?'} (11015) (SQLPrepare)")

在阅读pyodbcWiki page on inserting data时,我没有读到任何带有插入字符串的速度缓冲。这一定与pyodbc如何处理(转义)日期戳有关。在

如何参数化datestamp——尤其是使用qodbcflavor of datestamp。在


Tags: textreportsqltitleshowamountsplabel
1条回答
网友
1楼 · 发布于 2024-09-20 23:01:16

在pyodbc参数化查询中几乎从来没有必要使用像{d'2018-02-12'}这样的ODBC转义序列。如果参数值是一个真正的Pythondate对象

q_startdate = date(2018, 2, 12)

然后pyodbc将通知ODBC驱动程序参数值为SQL_TYPE_DATE,如ODBC跟踪日志中所示

^{pr2}$

我们可以在SQL命令文本中使用一个空的参数占位符

... parameters DateFrom = ?, ...

相关问题 更多 >

    热门问题