我一直在不知疲倦地尝试解决在python中使用参数化mysql查询的问题,并且尚未找到解决方案。
我想做的就是这么简单: -
def parameterized_dml_query(self, sql, param):
print sql, param
cursor = self.connection.cursor()
b='wtf'
cursor.execute("""insert into table(schema_name) values %s""", (b,))
self.connection.commit()
logger.info("Row(s) were updated/ inserted :%s for sql : %s",str(cursor.rowcount), sql)
no_of_rows_update = str(cursor.rowcount)
return no_of_rows_update
但我总是得到这个错误:
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''wtf'' at line 1")
我不知道为什么这个...... API正在为它添加单引号。
其他问题: - 1.有没有办法参数化table_name。 2.如果我有一个像
这样的值列表,则插入NULLlist_of_keys = ''.join(['key1','key2','key3'])
list_of_values =''.join(['v1', None, 'v2'])
sql = """insert into table(%s) values %s"""
param = (list_of_keys, list_of_values)
我称之为parameterized_dml_query
功能它不起作用。那么什么是处理无的最佳方式。
答案 0 :(得分:1)
您有sql语法错误。你忘记了值之后的括号。 table
也是保留字。我会用反引号引用。请改用以下内容:
cursor.execute("""insert into `table`(schema_name) values (%s)""", (b,))
此外,您无法将字段作为参数传递。您可以使用:
list_of_keys = ''.join(['key1','key2','key3'])
sql = """insert into `table`(%s) values (%%s)""" % list_of_keys
cursor.execute(sql, ['v1', None, 'v2'])