在 pypyodbc 的 SQL 字符串中转义字符
Escaping characters in SQL string for pypyodbc
假设我在 SQL 服务器中有 my_table
这样的:
CREATE TABLE my_table
(col1 VARCHAR(100),
col2 VARCHAR(100),
col3 INT)
我尝试使用 Python 3.5 和 pypyodbc
库向 table 插入一些记录,如下所示:
import pypyodbc
connection = pypyodbc.connect('Driver={SQL Server};' 'Server=12.3.456.789.0123;' 'Database=mydb;' 'uid=me;pwd=mypwd')
cursor= connection.cursor()
data = [{'p1': "I'm hungry", 'p2': "text for col2", 'p3': '1234'}]
for dd in data:
insert_sql = "INSERT INTO my_table (col1,col2,col3) VALUES (%s, %s, %s)"
cursor.execute(insert_sql, (dd['p1'], dd['p2'], dd['p3']))
但是当上面的代码是运行时,它returns:
pypyodbc.ProgrammingError: ('HY000', 'The SQL contains 0 parameter markers, but 3 parameters were supplied')
我不知道我做错了什么。如果有人能帮我解决这个问题,我将不胜感激!
这里的问题是您正在使用 python 或其他编程语言中的 %s 占位符。然而 pypyodbc 使用 ?作为占位符(参数标记)。只需将 %s 替换为 ?,您的代码应该可以正常工作。
import pypyodbc
connection = pypyodbc.connect('Driver={SQL Server};' 'Server=12.3.456.789.0123;' 'Database=mydb;' 'uid=BenchmarkingUS;pwd=mypwd')
cursor= connection.cursor()
data = [{'p1': "I'm hungry", 'p2': "text for col2", 'p3': 1234}]
for dd in data:
insert_sql = "INSERT INTO phyo_test (col1,col2,col3) VALUES (?, ?, ?)"
cursor.execute(insert_sql, (dd['p1'], dd['p2'], dd['p3']))
cursor.commit()
注意:您将 p3 的值设置为不会出错的字符串“1234”。不过还是改成int 1234比较好,防止数据类型错误。
假设我在 SQL 服务器中有 my_table
这样的:
CREATE TABLE my_table
(col1 VARCHAR(100),
col2 VARCHAR(100),
col3 INT)
我尝试使用 Python 3.5 和 pypyodbc
库向 table 插入一些记录,如下所示:
import pypyodbc
connection = pypyodbc.connect('Driver={SQL Server};' 'Server=12.3.456.789.0123;' 'Database=mydb;' 'uid=me;pwd=mypwd')
cursor= connection.cursor()
data = [{'p1': "I'm hungry", 'p2': "text for col2", 'p3': '1234'}]
for dd in data:
insert_sql = "INSERT INTO my_table (col1,col2,col3) VALUES (%s, %s, %s)"
cursor.execute(insert_sql, (dd['p1'], dd['p2'], dd['p3']))
但是当上面的代码是运行时,它returns:
pypyodbc.ProgrammingError: ('HY000', 'The SQL contains 0 parameter markers, but 3 parameters were supplied')
我不知道我做错了什么。如果有人能帮我解决这个问题,我将不胜感激!
这里的问题是您正在使用 python 或其他编程语言中的 %s 占位符。然而 pypyodbc 使用 ?作为占位符(参数标记)。只需将 %s 替换为 ?,您的代码应该可以正常工作。
import pypyodbc
connection = pypyodbc.connect('Driver={SQL Server};' 'Server=12.3.456.789.0123;' 'Database=mydb;' 'uid=BenchmarkingUS;pwd=mypwd')
cursor= connection.cursor()
data = [{'p1': "I'm hungry", 'p2': "text for col2", 'p3': 1234}]
for dd in data:
insert_sql = "INSERT INTO phyo_test (col1,col2,col3) VALUES (?, ?, ?)"
cursor.execute(insert_sql, (dd['p1'], dd['p2'], dd['p3']))
cursor.commit()
注意:您将 p3 的值设置为不会出错的字符串“1234”。不过还是改成int 1234比较好,防止数据类型错误。