gpt4 book ai didi

python - 在 Python 中,如何转义将用作 SQL 语句的字符串中的单引号?

转载 作者:行者123 更新时间:2023-11-29 11:10:25 26 4
gpt4 key购买 nike

我构建了一个简单的语句来在 MySQL 表上运行加载数据本地文件。我使用 Python 生成字符串并运行查询。所以我使用Python包pymysql

这是构建字符串的行。假设 metadata_filename 是一个正确的字符串:

load_data_statement = """load data local infile """ + metadata_filename + """INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '\'';"""

我最初进行了字符串替换,并想看看这是否是问题所在,但事实并非如此。如果我编辑上面的语句并推荐 ENCLOSED BY 部分,它可以运行,但无法正确加载数据,因为我需要包含的字符

如果我 print(load_data_statement),我会得到看似正确的 SQL 代码,但 SQL 连接器似乎无法读取它。这是打印的内容:

load data local infile 'filename.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY ''';

这一切似乎都是正确的,但 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"""将数据本地infile 'tgt_metadata_%s.txt'加载到表table1字段中,字段由','封闭,由'\''包围;"""%metadata_filename

还尝试了原始字符串:load_data_statement = r"""将数据本地infile 'tgt_metadata_%s.txt'加载到表table1字段中,字段由','封闭,由'\''包围;"""%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"""将数据本地 infile\'tgt_metadata_%s.txt\' 加载到表 table1 字段中,字段由 ',' 终止,由 '\'' 包围;"""%元数据文件名

执行行很简单 `cur.execute(load_data_statement)

我得到的错误很奇怪: `pymysql.err.ProgrammingError: (1064, "您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法'tgt_metadta_mal.txt'.txt' INTO 表 tgt_metadata 字段在第 1 行由 ','; ENC' 终止”)

我不明白为什么该消息以“tgt_metadata_mal.txt”开头,并且仅显示 ENCLOSED BY... 的前 3 个字母

最佳答案

无需转义该字符串。

cursor.execute("SELECT * FROM Codes WHERE ShortCode = %s", text)

您应该使用%s而不是您的字符串,然后(在本例中为文本)将是您的字符串。这是最安全的防护方式 SQL Injection

关于python - 在 Python 中,如何转义将用作 SQL 语句的字符串中的单引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com