簡體   English   中英

在Python中,如何在用作SQL語句的字符串中轉義單引號?

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

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