是否有Python的Python等价物mysql_real_escape_string?
我试图直接从Python插入一些MySQL数据库的字符串,并继续被字符串中的引号绊倒.
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)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了re.escape()但是它逃脱了字符串中的每个非字母数字字符,这不是我需要的东西 - 我只需要在这个实例中转义单引号(加上一般其他任何可能使MySQL绊倒的东西).
我想可以手动执行此操作,但是在Python中有更聪明的方法吗?
YOU*_*YOU 39
如果您使用的是mysql-python,请尝试
MySQLdb.escape_string(SQL)
Run Code Online (Sandbox Code Playgroud)
例
>>> import MySQLdb
>>> MySQLdb.escape_string("'")
"\\'"
Run Code Online (Sandbox Code Playgroud)
        Ale*_*lli 14
cursor.executemany('INSERT INTO candidate (name, address) VALUES (%s, %s)',
                   [(v_dict['name'], v_dict['address'])] * len(v_dict))
Run Code Online (Sandbox Code Playgroud)
应该做你的代码似乎尝试的东西 - 插入相同的相同值N次(你循环v_dict.iteritems()但完全忽略循环变量,并且instad只是重复使用v_dict每次特定的两个值).当然,如果你的意思完全不同,第二行将需要相应地改变,但关键的想法无论如何是使用占位符,而不是字符串格式,用于这样的任务.
是否有Python的等效PHP的mysql_real_escape_string?
是的,它escape_string在数据库连接对象上.
不 escape_string开MySQLdb模块,这相当于mysql_escape_string在PHP中,与多字节字符集相同的潜在漏洞.你不应该使用MySQLdb.escape_string.
无论如何,使用参数化查询比在Alex的答案中更好.这使得更容易移植到其他数据库(它是DB-API标准的一部分,而escape_string不是),并且通常更方便.(比参数化更方便的是在PHP中.)