在尝试插入时,MysqlDB将单引号附加到字符串

时间:2015-07-22 22:29:39

标签: python mysql mysql-python

我一直在不知疲倦地尝试解决在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.如果我有一个像

这样的值列表,则插入NULL
list_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功能它不起作用。那么什么是处理无的最佳方式。

1 个答案:

答案 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'])