【问题标题】:Does pyodbc support any form of named parameters?pyodbc 是否支持任何形式的命名参数?
【发布时间】:2015-12-21 07:50:16
【问题描述】:

我知道 sqlite3 有

data = {'test_col': 012345679}
sqlite3_conn.execute("""
    UPDATE test_db SET test_col = :test_col
    ;""", data)

而 mysql-connector-python 有

data = {'test_col': 012345679}
mysql_conn.execute("""
    UPDATE test_db SET test_col = %(test_col)s
    ;""", data)

但是 pyodbc 是否支持任何形式的命名参数?我喜欢能够将dict 传递给执行方法。很方便,有我的一些查询,比如INSERT INTO ... ON DUPLICATE KEY UPDATE,是需要的。

【问题讨论】:

  • 简短的回答是“否”(参考:here)。在某些情况下,一种解决方法是可能的,例如,使用 EXEC 用于 T-SQL 中的存储过程,如答案 here 中所述。

标签: python mysql sql pyodbc


【解决方案1】:

它不支持命名参数,但以正确顺序传递的绑定参数相当简单:

x = "This"
y = 345

mssql_cur.execute("SELECT * FROM mytable WHERE colx = ? AND coly = ?", x, y)

mssql_cur.execute("SELECT * FROM mytable WHERE colx = ? AND coly = ?", (x, y))

更多细节和选项在这里,比如传递executemany参数:

https://github.com/mkleehammer/pyodbc/wiki/Cursor

祝你好运!

【讨论】:

  • 这些是 qmark 样式的占位符。我说的是命名样式占位符,或者命名参数:sqlite3 --> :colname; mysql-connector --> %(colname)s
  • 我已经有一段时间没有接触过代码了,但上次我是,它们不受支持。您可以传递为x, y(x, y)。使用executemany,您可以传递为((x, y), (a, b))。您可以在这里提出功能请求,如果有的话,那就太好了:github.com/mkleehammer/pyodbc/issues
猜你喜欢
  • 2013-10-08
  • 1970-01-01
  • 2012-12-04
  • 2015-09-06
  • 2010-12-15
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多