[英]Escaping single and double quotes for mysql in python
我在python 2.7中使用mysql.connector python庫
我有一個unicode字符串,該字符串可能包含也可能不包含單引號和雙引號。 以下是我為逸出功能嘗試的操作:
def escape(string):
#string.MySQL.escape_string()
#string = string.decode('string_escape')
#string = string.encode('unicode-escape').replace("'", "''")
#string = string.encode('unicode-escape').replace('"', '\"')
#string = string.encode('unicode-escape').replace("'", u"\u2019")
#string = string.encode('unicode-escape').replace('''"''', u"\u201D")
#string = string.encode('unicode-escape').replace('''''', u"\u201D")
return string
似乎沒有任何效果。 我嘗試使用此功能,但仍然給出mysql語法錯誤。
我需要mysql.connector庫中的某些東西,以轉義單引號和雙引號而不破壞unicode和mysql查詢。
這是我正在使用的SQL查詢的示例:
"""SELECT * FROM messages WHERE msg_id = '{msg_id}'""".format(**db_dict)
讓我知道是否需要更多詳細信息
編輯 :示例SQL查詢已更新
cursor.execute('SELECT * FROM messages WHERE msg_id = %s', (db_dict['msg_id'],))
是您要在此處運行的內容。 python的數據庫接口不支持標准的字符串轉義,並且,按照@bobince的評論,這是引導的安全漏洞。
MySQLdb正式聲明使用format
paramstyle,但它也支持pyformat
樣式*,因此,如果要使用dict中的參數,可以使用:
db_dict = {'msg_id': "1'2'3", ...}
cursor.execute("SELECT * FROM messages WHERE msg_id = %(msg_id)s", db_dict)
使用字符串操作創建sql查詢只會導致sql注入漏洞,因此您永遠不要這樣做。
* ...大多數在屏幕后面使用python字符串格式的數據庫連接器都執行相同的操作,它們將format或pyformat中的一種指定為paramstyle,但實際上兩者都支持。 dbapi2不允許在此處指定兩個值,但是也不禁止支持多個parmstyles。 如果您編寫的代碼可能使用unknowon dbapi2連接器,則足以查詢支持的paramstyle,就可以知道全部內容,但這不是必須的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.