【发布时间】:2018-07-16 08:21:00
【问题描述】:
我是 python 的新手,正在编写一个脚本来读取 json 文件,进行一些处理,然后生成最终写入 sql 文件的 SQL 语句。我在python 3.6 上使用mysql.connector 创建连接。
从该连接对象,我需要引用绑定到SQL 的参数。我没有从 python 执行 SQL,否则 python 本身会处理它。
另外,我没有直接使用单引号/双引号,因为我的值可能包含这些引号,并且 sql 会中断。此外,需要引用的字符很多,因此仅替换一个字符(例如单引号)后无法确定。
示例代码:
import mysql.connector
con = mysql.connector.connect(user=user, password=pwd, database=database, host=host)
sql = "INSERT INTO customer_data VALUES "
values = "(default, %s, %s, %s);" % (
cust_record["name"],
cust_record["address"],
comment["date"]
)
fh.write("%s %s\n" % (sql, values))
它在创建插入语句时按原样写入字符串,我避免使用硬编码的单引号。
我也在控制台上试过这个进行测试:
name = 'kam\al'
str = ("my name is %s" % name)
con.converter.escape(str)
它给出:'my name is kam\x07l',没有引用名称字符串。
在 perl 中也可以通过 perl DBI 的quote 方法来实现。
【问题讨论】:
-
如果你能展示一段演示问题的代码,会更容易回答。
-
@BartoszKP:编辑添加示例代码并在控制台上进行测试。我需要生成 SQL 语句并将它们写入文件,以便 DBA 可以使用源命令直接运行它
标签: python python-3.x mysql-python mysql-connector mysql-connector-python