【问题标题】:what does ? mean in python pyodbc module什么? python pyodbc模块中的意思
【发布时间】:2016-03-09 07:02:55
【问题描述】:
import pyodbc
cursor.execute("INSERT INTO Testing_Param(Seed_Number,Cycle_Name) VALUES (?,?)",('0','CoupleIn'))

“?”是什么意思?在代码中是什么意思? 当我尝试更换 ?到 %s 表示 "CoupleIn" 这是字符串,%d 表示 "0",为什么会出现错误消息:

pyodbc.ProgrammingError: ('SQL 包含 0 个参数标记,但提供了 2 个参数', 'HY000')

我是 pyodbc 模块的新手,可以将数据从 Python 传输到 Microsoft SQL 服务器

【问题讨论】:

    标签: python sql-server pyodbc


    【解决方案1】:

    ? 是替换引擎的占位符。 cursor.execute 函数负责正确转义元组中的值并将它们插入到相应问号将形成有效查询的查询中。这可以保护您免受sql injection attacks 的影响,在这种情况下,正常的字符串插值会使您的数据库容易受到攻击者的攻击。

    您可以在PEP-0249 中阅读有关标准python 数据库api 的更多信息——具体来说,您的数据库包装器使用qmark 参数样式。

    【讨论】:

    • Tq 为您解释
    【解决方案2】:

    这两个问号分别是参数0CoupleIn 的占位符。 这与 Python 中的文本格式类似,其中变量的占位符是 %

    http://mkleehammer.github.io/pyodbc/段下Parameters

    【讨论】:

    • 是的,我知道使用 %,但是当我将 %d 用于 '0' 和 %s 用于 "CoupleIn' 时,为什么会遇到错误?
    • 我说它是相似的,只是为了说明。在上面的示例中,您需要遵循 pyodbc 的语法,它只使用 ?
    【解决方案3】:

    它是参数值“0”和“Couple”的占位符。 cursor.execute 将替换值来代替 ?s。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-03
      • 2012-11-27
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多