mysqldb python转义?还是%s?
我目前正在使用mysqldb 在mysqldb参数中转义字符串的正确方法是什么 注意mysqldb python转义?还是%s?,python,mysql,Python,Mysql,我目前正在使用mysqldb 在mysqldb参数中转义字符串的正确方法是什么 注意E=lambda x:x.encode('utf-8') 1) 所以我的连接是用charset='utf8'设置的 以下是这些参数的错误:w1,w2=u'你好', u'我好' self.cur.execute("SELECT dist FROM distance WHERE w1=? AND w2=?", (E(w1), E(w2))) ret = self.cur.execute("SELECT dist FR
E=lambda x:x.encode('utf-8')
1) 所以我的连接是用charset='utf8'设置的
以下是这些参数的错误:w1,w2=u'你好', u'我好'代码>
self.cur.execute("SELECT dist FROM distance WHERE w1=? AND w2=?", (E(w1), E(w2)))
ret = self.cur.execute("SELECT dist FROM distance WHERE w1=? AND w2=?", (E(w1), E(w2)))
文件“build/bdist.linux-i686/egg/MySQLdb/cursors.py”,第158行,在execute中
TypeError:在字符串格式化过程中并非所有参数都已转换
self.cur.execute("SELECT dist FROM distance WHERE w1=%s AND w2=%s", (E(w1), E(w2)))
这可以正常工作,但是当w1或w2在\内时,转义显然失败
我个人知道,由于注入攻击等原因,%s不是传递参数的好方法。您可以使用三重引号和原始字符串格式
self.cur.execute(r"""SELECT dist FROM distance ... """,...)
如果我没记错,那么就不需要手动编码unicode字符串。mysqldb模块将为您执行此操作
mysqldb模块使用%s
作为参数,而不是?
。这就是第一个示例中出现错误的原因。更具体地说。。。cursor.execute()
方法采用一个可选参数,该参数包含要引用并插入SQL模板/语句的值。这不是用一个简单的%
操作符完成的cursor.execute(一些sql,一些参数)
与cursor.execute(一些sql%,一些参数)
指定任何兼容的驱动程序/模块必须提供.paramstyle
属性,该属性可以是“qmark”、“numeric”、“named”、“format”或“pyformat”中的任意一个。。。因此,从理论上讲,可以通过内省和一点咀嚼将SQL查询字符串调整为支持的形式。这应该比自己尝试在SQL字符串中引用和插入值更安全
我特别喜欢阅读PsycoPG文档。这才是真正的原因。