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

标签 python pyodbc qodbc

我正在使用pyodbcQODBC 一起构造 ODBC 查询。

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

  1. sql = "sp_report ProfitAndLossStandard 显示 Amount_Title、文本、标签、金额参数 DateFrom = {d'2018-02-12'}、DateTo = {d'2018-02-18'}、SummarizeColumnsBy ='TotalOnly', ReturnRows='全部'"

  2. sql = "sp_report ProfitAndLossStandard 显示 Amount_Title、文本、标签、金额参数 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])
  • sql = "sp_report ProfitAndLossStandard 显示 Amount_Title、文本、标签、金额参数 DateFrom = ?, DateTo = ?, SummarizeColumnsBy='TotalOnly', ReturnRows='All'"
  • >>> ('HY004', '[HY004] [Microsoft][ODBC 驱动程序管理器] SQL 数据类型超出范围 (0) (SQLBindParameter)')

    q_startdate = (dates[0])
    q_enddate = (dates[1])
    
  • sql = "sp_report ProfitAndLossStandard 显示 Amount_Title、文本、标签、金额参数 DateFrom = {d'?'}、DateTo = {d'?'}、SummarizeColumnsBy='TotalOnly'、ReturnRows='All'"
  • >>> ('42000', "[42000] [QODBC] [sql 语法错误] 未找到预期的词法元素: = {d'?'} (11015) (SQLPrepare)")

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

    如何参数化日期戳 - 特别是使用 qodbc flavor of datestamp .

    最佳答案

    在 pyodbc 参数化查询中几乎不需要使用像 {d'2018-02-12'} 这样的 ODBC 转义序列。如果参数值为 true Python date对象

    q_startdate = date(2018, 2, 12)
    

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

    [ODBC][2984][1532535987.825823][SQLBindParameter.c][217]
            Entry:
                Statement = 0x1f1a6b0
                Param Number = 1
                Param Type = 1
                C Type = 91 SQL_C_TYPE_DATE
                SQL Type = 91 SQL_TYPE_DATE
                Col Def = 10
                Scale = 0
                Rgb Value = 0x1f3ac78
                Value Max = 0
                StrLen Or Ind = 0x1f3ac58
    

    我们可以在 SQL 命令文本中使用裸参数占位符

    ... parameters DateFrom = ?, ...
    

    关于python - 如何在 pyODBC 查询中参数化日期戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489632/

    相关文章:

    python - pyodbc unicode 查询失败

    python - 我怎样才能解决以下结果?

    django - 将带有 SQL 数据库的 Django 应用程序部署到 Azure

    c++ - Access数据库-QODBC驱动程序对管理员执行授予

    python - Blas GEMV 发射失败 : m=3, n=2 [Op:MatMul]

    python - 将 API 请求附加到另一个字典

    Python 十进制自定义上下文

    Python 相当于使用管道将文件输出到 Perl 中的 gzip