簡體   English   中英

在python中轉義MySQL的引號

[英]Escaping quotes for MySQL in python

按照此線程上的建議,我將list作為string類型存儲在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')

在一些像這樣的列表條目上:

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]]]

我認為這是因為在foo_bar的開頭有一個雙引號,我使用以下代碼在數據庫中創建條目:

SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES ("{}", "{}", "{}", "{}")'.format(var1, var2, var3, var4)
cursor.execute(SQL)

並且雙引號沒有被轉義。 如果我從以下位置刪除雙引號:
("{}", "{}", "{}", "{}") ,我遇到了同樣的錯誤,我嘗試使用不同的字符串格式,(使用%s )但這也不起作用。
有任何想法嗎?

不要使用字符串格式化插值SQL值。 使用 SQL 參數:

SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))

這里的%s是 SQL 參數; 然后數據庫會為您轉義這些值(作為`cursor.execute 的第二個參數傳入)。

您需要使用什么語法取決於您的數據庫適配器; 有些使用%s ,其他使用? 對於占位符。

您不能以其他方式將 Python 容器(如列表)用於這些參數。 您必須先將其序列化為字符串格式; 您可以為此使用 JSON,但是您還必須記住在查詢數據庫時再次將 JSON 解碼為 Python 字符串。 這就是另一個問題的答案試圖傳達的內容。

例如,如果var4是列表,您可以使用:

cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES ("{!a}", "{!a}", "{!a}", "{!a}")'.format(var1, var2, var3, str(var4))
cursor.execute(SQL)

{!a}應用ascii()並因此轉義非 ASCII 字符,如引號甚至表情符號。

查看Python3 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM