【问题标题】:How to quote string in python using "mysql.connector"如何使用“mysql.connector”在python中引用字符串
【发布时间】: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


【解决方案1】:

更新

您可以同时使用convert_to_mysql(),并以不同的方式构建连接。这是一个示例(Python 3.6):

import _mysql_connector
ccnx.connect(user='abc', database='xyz', password='def')
params = ('sdgs\adsgsdg', 'sdgs^&%"', "sdgsdg'") 
print(ccnx.convert_to_mysql(*params)) 

将输出:

(b"'sdgs\x07dsgsdg'", b'\'sdgs^&%\\"\'', b"'sdgsdg\\''")

它们已经被引用和转义。请注意,它们是字节(python 3),因此您可能需要将它们转换为 str(取决于您的 python 版本。

见: _mysql_connector.MySQL.convert_to_mysql() Method

旧答案

不要以这种方式构造查询,您可能会遇到 SQL 注入和其他问题。

使用准备好的语句,让司机为你做报价,例如:

stmt = "INSERT INTO names (name) VALUES (%s)"
name = "Some name' who cares"

cursor.execute(stmt, (name,))

有关详细信息,请参阅: Inserting Data Using Connector/Python

【讨论】:

  • 我不想从 python 执行,我只需要在文件中编写插入语句,它将由 DBA 运行。暂时不要考虑注入,我只运行一次,查询准备成功后这个脚本会被删除
  • 我正在使用“mysql.connector”,我们可以用这个模块做些什么吗?
  • 该模块应该带有mysql.connector。它也在他们的文档中(我在答案中链接到他们)。
  • 我的系统已经安装了mysql.connector。我不确定_mysql_connector 是否带有mysql.connector,但反之则不然。前者用于 C API,后者可与标志 use_pure=False 一起使用。 dev.mysql.com/doc/connector-python/en/…dev.mysql.com/doc/connector-python/en/…
  • 你试过了吗?我已经在一个干净的 virtualenv 中进行了测试,运行 pip install mysql-connector-python,然后在 python shell import _mysql_connector 中运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多