簡體   English   中英

在python中轉義MySQL的單引號和雙引號

[英]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.

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