我想用python创建一个SQL文件,以便稍后由mysql客户端执行。如何正确地转义查询字符串?
在处理数据库时,我会使用connections语句函数-但是我如何使用它们在sql文件中创建转义查询呢?
编辑:这是一个例子:
from datetime import datetime
now = datetime.now().strftime("%Y%m%d%H%M%S")
user = 'johndoe'
logentry = "DELETE FROM test WHERE id='5';"
with open('script.sql', 'w') as script:
eventlog = f"INSERT INTO eventlog "\
f"(user, timestamp, sqlstatement) VALUES "\
f"('{user}','{now}','{logentry}');"
script.writelines(eventlog + '\n')
它使用- invalid -语句创建一个文件:INSERT INTO eventlog (user, timestamp, sqlstatement) VALUES ('johndoe','20220810145227','DELETE FROM test WHERE id='5';');
正如您所看到的,“'“没有被转义--我怎么才能把字符串转义呢?
2条答案
按热度按时间1sbrub3j1#
Python连接器有一个过滤器函数,用于转义引号和其他需要转义的字符。
假设
cnx
是由Python Connector for MySQL打开的数据库连接:它需要连接到数据库,因为转义必须知道数据库服务器的字符集。
l5tcr1uw2#
由于Python字符串是Unicode格式的,因此首先需要在sql文件中设置正确的字符集:
SET NAMES utf8mb4
.对于转义unicode SQL语句,有两个选项:
1.简单的方法-建立一个连接到您的数据库服务器,并使用驱动程序转义函数,例如.
导入mariadb连接= mariadb.连接(主机=本地主机,.....)
转义事件日志=连接转义字符串(事件日志)
在PyMySQL中,它是
literal
方法。1.如果您不想使用数据库驱动程序,或者无法连接到数据库,请使用MariaDB's string literal documentation的转义序列一节中描述的规则编写自己的转义方法