[英]In Python how do I escape a single quote within a string that will be used as a SQL statement?
我構建了一個簡單的語句,以在MySQL表上運行load data local infile
。 我正在使用Python生成字符串並運行查詢。 所以我在用Python包pymysql
。
這是構建字符串的行。 假設metadata_filename
是正確的字符串:
load_data_statement =“”“載入數據本地文件”“” +元數據文件名+“”“ INTO TABLE table1 FIELDS BY',',ENCLOSED BY'\\”;“”“
我最初使用字符串替換,想查看是否是問題所在,但不是。 如果我編輯上面的語句並推薦ENCLOSED BY
部分,它可以運行,但由於需要使用封閉的字符,因此無法正確加載數據
如果我print(load_data_statement)
,我得到的似乎是正確的SQL代碼,但SQL連接器似乎未讀取它。 這是打印的內容:
將數據本地文件infile'filename.txt'裝入表table1的字段以',','
一切似乎都是正確的,但是Mysql引擎沒有接受它。 我應該在Python中進行什么編輯才能轉義單引號或正確編寫?
編輯:
我一直在運行替代字符串的方法,但仍然遇到問題: load_data_statement = """load data local infile 'tgt_metadata_%s.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\'';""" % metadata_filename
還嘗試了原始字符串: load_data_statement = r"""load data local infile 'tgt_metadata_%s.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\'';""" % metadata_filename
還嘗試了原始字符串: load_data_statement = r"""load data local infile 'tgt_metadata_%s.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\'';""" % metadata_filename
並嘗試添加額外的轉義load_data_statement = r"""load data local infile 'tgt_metadata_%s.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\\\'';""" % metadata_filename
:還嘗試了原始字符串: load_data_statement = r"""load data local infile 'tgt_metadata_%s.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\\\'';""" % metadata_filename
還嘗試了原始字符串: load_data_statement = r"""load data local infile \\'tgt_metadata_%s.txt\\' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\'';""" % metadata_filename
執行行很簡單`cur.execute(load_data_statement)
而且我得到的錯誤很奇怪:`pymysql.err.ProgrammingError:(1064,“您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以在'tgt_metadta_mal附近使用正確的語法。 txt'.txt'INTO表tgt_metadata FIELDS以','; ENC'在第1行終止“)
我不明白為什么消息從'tgt_metadata_mal.txt開始,並且只顯示ENCLOSED BY的前3個字母...
無需轉義該字符串。
cursor.execute("SELECT * FROM Codes WHERE ShortCode = %s", text)
您應該使用%s
而不是字符串,然后(在這種情況下為text)將成為您的字符串。 這是防止SQL Injection
的最安全方法
我認為問題出在您打印的SQL語句上。 '''
的單引號應轉義為'\\''
。 您的反斜杠在Python級別而不是MySQL級別轉義了引號。 因此,Python字符串應以ENCLOSED BY '\\\\'';
結尾ENCLOSED BY '\\\\'';
您還可以使用原始字符串文字符號: r"""INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\\'';"""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.