Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的mysql\u real\u escape\u string等价物,用于将字符串安全地放入mysql?_Python_Mysql - Fatal编程技术网

Python的mysql\u real\u escape\u string等价物,用于将字符串安全地放入mysql?

Python的mysql\u real\u escape\u string等价物,用于将字符串安全地放入mysql?,python,mysql,Python,Mysql,是否有与PHP的mysql\u real\u escape\u string相当的Python 我试图直接从Python向MySQL db中插入一些字符串,但总是被字符串中的引号绊倒 mysql_string = "INSERT INTO candidate (name, address) VALUES " for k, v in v_dict.iteritems(): mysql_string += " ('" + v_dict['name'] + "', '" + v_dict[

是否有与PHP的
mysql\u real\u escape\u string
相当的Python

我试图直接从Python向MySQL db中插入一些字符串,但总是被字符串中的引号绊倒

mysql_string = "INSERT INTO candidate (name, address) VALUES  " 
for k, v in v_dict.iteritems():
    mysql_string += " ('" + v_dict['name'] + "', '" + v_dict['address'] + "'), "
mysql_string += ";"
cursor.execute(mysql_string)
我尝试了
re.escape()
,但这会转义字符串中的所有非字母数字字符,这不是我所需要的-我只需要在这个实例中转义单引号(加上更常见的可能会使MySQL出错的任何其他字符)


我想您可以手动完成这项工作,但在Python中是否有更智能的方法呢?

在这种特殊情况下,您只需要使用游标的executemany方法

mysql_string = "INSERT INTO candidate (name, address) VALUES  (%s,%s);"
cursor.executemany(mysql_string, v_dict.iteritems())

如果您使用的是mysql-python,请尝试一下

MySQLdb.escape_string(SQL)
范例

>>> import MySQLdb
>>> MySQLdb.escape_string("'")
"\\'"

MySQLdb.escape\u字符串
是等效的。所有这些都在中描述

应该按照代码所尝试的方式来做——插入相同的值N次(在
v_dict.iteritems()
上循环,但完全忽略循环变量,每次都只是重复使用
v_dict
中的这两个特定值)。当然,如果您的意思完全不同,则第二行需要相应地更改,但关键的想法是使用占位符,而不是字符串格式来执行此类任务

是否有与PHP的mysql\u real\u escape\u字符串相当的Python

是的,它是数据库连接对象上的
escape\u字符串

MySQLdb
模块上的Not
escape\u string
,该模块相当于PHP中的
mysql\u escape\u string
,具有与多字节字符集相同的潜在漏洞。您不应该使用MySQLdb.escape\u字符串


在任何情况下,您最好使用参数化查询,如Alex的答案所示。这使得移植到其他数据库更容易(它是DB-API标准的一部分,
escape\u string
不是),而且通常更方便。(比PHP中的参数化方便得多。)

除了
MySQLdb.escape\u string(SQL)
之外,pymysql python库还提供
escape\u string()
函数

>>> import pymysql
>>> pymysql.escape_string("'")
"\\'"
>>>

我觉得这很简单。谢谢-这是几个方面的错误答案。OP最好使用cursor.executemany()或使用批量加载工具(如果他从csv文件开始)。您可以检查。它完全等同于mysql\u real\u escape\u string。我知道,我的回答并没有涵盖所有问题,但它并没有错。但是好吧,你可能不同意。Alex是对的:以这种方式使用ExecuteMay()可以避免格式问题和所有不正确SQL的可能性。正如Alex所暗示的那样,@AP257你正在用你的字典做一些疯狂的事情。我也有同样的想法,你的方法是最简单的,但是使用“三重双引号”你可以避免很多错误
cursor.executemany(““”插入候选(名称、地址)值(%s,%s)”,[(v_dict['name'],v_dict['address'])]*len(v_dict))
您是否有某种使用python插入MySQL数据库的CSV文件?您正在使用
import csv
获取每行数据的字典?如果是这样,您应该查找MySQL批量插入实用程序。是的,别问了。我使用Web派系托管,但他们不支持mysqlimport:(可能与写入数据库时出错的情况相同:'CMySQLConnection'对象没有属性'escape_string'看起来pymysql没有此功能。
>>> import pymysql
>>> pymysql.escape_string("'")
"\\'"
>>>