带引号的Python和MySQL查询

时间:2017-06-22 08:11:24

标签: python mysql string python-3.x quotes

使用Python3中的脚本,从文件中提取一些字符串后,它们应该用作插入MySQL数据库的数据,如下所示:

query1 = """INSERT INTO {:s} VALUES ({:s}, {:s}, {:s}, {:s});""".format(table1,"""0""",string1,string2,string3)
cursor1.execute(query1)

某些字符串包含不同且令人不快的引号,例如:

a "'double quoted'" example string

如果我使用三引号分隔符定义一些示例字符串

string1 = """a "'double quoted'" example string"""

以上查询成功。相反,如果在解析外部文件后函数返回字符串,则查询会生成错误:

_mysql_exceptions.ProgrammingError: (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 \'first string, "\'Quoted part\'" of second string, , Third string\' at line 1')

我也尝试过:

query1 = """INSERT INTO {:s} VALUES ('{:s}', '{:s}', '{:s}', '{:s}');""".format(table1,"""0""",string1,string2,string3)

但会产生相同的错误。

另外

query1 = """INSERT INTO %s VALUES (%s, %s, %s, %s);"""
data1 = ("""table1"""","""0""",string1,string2,string3)
cursor1.execute(query1,data1)

query1 = """INSERT INTO %s VALUES ('%s', '%s', '%s', '%s');"""
data1 = ("""table1"""","""0""",string1,string2,string3)
cursor1.execute(query1,data1)

生成相同的错误。

如何解决这个问题?也许,一旦字符串被函数返回,是否可以用三引号重新定义它们?

1 个答案:

答案 0 :(得分:3)

这是为语句添加参数的方法。

sql = "INSERT INTO my_table VALUES (%s, %s, %s);"

cursor.execute(sql, [string1, string2, string3])

请参阅MySQLCursor.execute()

在此示例中,您不必显式引用值,因为您没有将它们粘贴到SQL中。此外,这更安全,因为如果字符串包含结束引用并且它们是一些恶意SQL,则它将不会被执行。

您无法将表名添加为参数,因此如果它在变量中,您 必须将其粘贴到您的SQL中:

sql = "INSERT INTO {} VALUES (%s, %s, %s);".format(table_name)