我已经尝试了几个驱动程序:pymsql,pyobdc并且在SQL中仍然存在格式单引号的问题。以下代码示例:
案例1。
import pyodbc
UPDATE_SQL3 = """
UPDATE STATION
SET
STATION_NAME = ?,
STATION_TITLE = ?,
ACTIVE = ?
WHERE
STATION_ID = ?
"""
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=local;DATABASE=DB;UID=me;PWD=pass')
cursor = conn.cursor()
cursor.execute(UPDATE_SQL3 %
(name,
title,
active,
id
))
此代码无法编译:
“并非在字符串格式化期间转换所有参数”
案例2。
UPDATE_SQL3 = """
UPDATE STATION
SET
STATION_NAME = %s,
STATION_TITLE = %s,
ACTIVE = %s
WHERE
STATION_ID = %s
"""
我发现错误:
('42000',“[42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL 服务器]'''附近的语法不正确。 (102)(SQLExecDirectW)“)
title = u'102.7 The Fan'
案例3。
UPDATE_SQL3 = """
UPDATE STATION
SET
STATION_NAME = '%s',
STATION_TITLE = '%s',
ACTIVE = %s
WHERE
STATION_ID = %s
"""
错误:
('42000',“[42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL 服务器]'s'附近的语法不正确。 (102)(SQLExecDirectW)“)
其中name = u'Power Michiana\\'s Hits and Hip Hop'
处理它的正确方法是什么?
答案 0 :(得分:2)
您的"案例1"本质上是正确的,但您没有正确地将参数传递给conn.execute
。而不是尝试使用字符串格式(通过%
运算符),只需将元组作为第二个参数传递给.execute
,如下所示:
import pyodbc
# test data
name = u"Power Michiana's Hits and Hip Hop"
title = u"(some title)"
active = False
id = 1
conn_str = "DSN=myDb_SQLEXPRESS"
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
UPDATE_SQL3 = """\
UPDATE STATION
SET
STATION_NAME = ?,
STATION_TITLE = ?,
ACTIVE = ?
WHERE
STATION_ID = ?
"""
cursor.execute(UPDATE_SQL3, (name, title, active, id))
conn.commit()
conn.close()
print("Done.")