按照此线程的建议,我将我的listasstring类型存储在中MySQL database,但是,我遇到了此错误:
_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 \'foo_bar" but I can\\\'t bar.\', u\'high\', 0]]")\' at line 1')
Run Code Online (Sandbox Code Playgroud)
在一些像这样的列表条目上:
var1 = 'Name'
var2 = 'Surname'
var3 = 15
var4 = [u'The Meter', [[u'Black', u'foo foo bar bar "foo_bar" but I can\'t bar', u'high', 0]]]
Run Code Online (Sandbox Code Playgroud)
我认为这是因为开头有一个双引号foo_bar,并且我使用以下代码在数据库中创建条目:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES ("{}", "{}", "{}", "{}")'.format(var1, var2, var3, var4)
cursor.execute(SQL)
Run Code Online (Sandbox Code Playgroud)
并且双引号没有被转义。如果我从: 中删除双引号
("{}", "{}", "{}", "{}"),我会得到相同的错误,我尝试使用不同的字符串格式(使用%s),但这也不起作用。
有任何想法吗?
不要使用字符串格式来插入 SQL 值。使用 SQL 参数:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Run Code Online (Sandbox Code Playgroud)
这里%s是 SQL 参数;然后数据库会为您转义这些值(作为第二个参数传递给“cursor.execute”)。
您需要使用的具体语法取决于您的数据库适配器;有些用于%s,其他用于?占位符。
您不能以其他方式使用 Python 容器(例如列表)来存储这些参数。您必须首先将其序列化为字符串格式;你可以使用 JSON 来实现这一点,但是当你查询数据库时,你还必须记住将 JSON 再次解码为 Python 字符串。这就是另一个问题的答案试图传达的内容。
例如,如果var4是列表,您可以使用:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))
Run Code Online (Sandbox Code Playgroud)