mariadb 如何在python中写入sql文件时转义SQL语句

dfuffjeb  于 2022-11-08  发布在  Python
关注(0)|答案(2)|浏览(171)

我想用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';');
正如您所看到的,“'“没有被转义--我怎么才能把字符串转义呢?

1sbrub3j

1sbrub3j1#

Python连接器有一个过滤器函数,用于转义引号和其他需要转义的字符。
假设cnx是由Python Connector for MySQL打开的数据库连接:

logentry = cnx.converter.escape("DELETE FROM test WHERE id='5';")

它需要连接到数据库,因为转义必须知道数据库服务器的字符集。

l5tcr1uw

l5tcr1uw2#

由于Python字符串是Unicode格式的,因此首先需要在sql文件中设置正确的字符集:
SET NAMES utf8mb4 .
对于转义unicode SQL语句,有两个选项:
1.简单的方法-建立一个连接到您的数据库服务器,并使用驱动程序转义函数,例如.
导入mariadb连接= mariadb.连接(主机=本地主机,.....)
转义事件日志=连接转义字符串(事件日志)
在PyMySQL中,它是literal方法。
1.如果您不想使用数据库驱动程序,或者无法连接到数据库,请使用MariaDB's string literal documentation的转义序列一节中描述的规则编写自己的转义方法

相关问题