pymssql 问题 - INSERT 不适用于参数

Posted

技术标签:

【中文标题】pymssql 问题 - INSERT 不适用于参数【英文标题】:pymssql problem - INSERT does not work with parameters 【发布时间】:2010-11-26 11:53:28 【问题描述】:

我正在使用 pymssql 在 Linux 上使用 Python 进行数据库编程。

我在将参数传递给查询时遇到问题。这个问题似乎只存在于 INSERT 查询中。

这行得通:

query = "SELECT col1, col2 FROM table WHERE col3=%s"
cur.execute(query, (value,))

但这不是:

query = "INSERT INTO table (col1, col2) VALUES (%s, %s)"
cur.execute(query, (value1, value2,))

知道为什么 INSERT 查询不起作用吗?

这是回溯:

Traceback (most recent call last):
  File "test.py", line 46, in ?
    cur.execute(query, (value1, value2,))
  File "/usr/lib/python2.4/site-packages/pymssql.py", line 126, in execute
    self.executemany(operation, (params,))
  File "/usr/lib/python2.4/site-packages/pymssql.py", line 152, in executemany
    raise DatabaseError, "internal error: %s" % self.__source.errmsg()
pymssql.DatabaseError: internal error: None

【问题讨论】:

Fedora 13 附带的 mysql-python 1.2.3 也适用于我。 它确实在 MySQL 中工作,但我使用的是 MSSQL。 :( 变量value1和value2的实际值是多少? 没发现,以为是mysql。如果我是你,我会和 pymssql 的作者一起讨论。 【参考方案1】:

原来我试图插入的值之一是 unicode 类型。当我使用str(value1) 将其转换为字符串时,查询有效。

【讨论】:

【参考方案2】:

这个怎么样:

cur.execute(query % (value1, value2))

【讨论】:

不,这不是 dbi-api 应该使用的方式,并且会导致 SQL 注入漏洞。

以上是关于pymssql 问题 - INSERT 不适用于参数的主要内容,如果未能解决你的问题,请参考以下文章

php 函数 last_insert_id() 不适用于 REPLACE INTO 查询

pymssql executemany insert valueerror

pymssql INSERT 不会自动增加 ID

准备好的语句适用于 INSERT 但不适用于 SELECT

pymssql 不返回结果数据

Python pymssql 插入错误