如何使用" mysql.connector"在python中引用字符串;

时间:2018-02-06 09:58:23

标签: python python-3.x mysql-python mysql-connector mysql-connector-python

我是python的新手并编写一个脚本来读取json文件,进行一些处理,并生成最终写入sql文件的SQL语句。我在mysql.connector上使用python 3.6创建连接。

从该连接对象,我需要引用绑定到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方法实现。

1 个答案:

答案 0 :(得分:0)

<强>更新

如果需要,可以使用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