2011-02-15 118 views
0

我正在与MySQLdb在Python中的项目。作为其中的一部分,我将移动用户详细信息,包括从一个生成密码的系统转移到一个只使用它们的新密码。MySQLdb输入其中字符串包含字符串分隔符

单引号,双引号或三引号可以描述字符串的开始和结束。然而,单引号和双引号是我正在迁移的4.5k左右用户中的几个哈希的一部分。两种代币都出现在这些盐的约450种中。

代码的编辑版本是如下

Django.execute ('INSERT INTO auth_user (password) VALUES ("' + user.password + '")') 

我曾尝试在这种数据库游标对象所使用的引用类型之间交换,因为当任一引用类型或其他被检测到,但是这仍然离开150左右,包含两者。

我可以使用哪些解决方法?

我已经尝试了三重引号,但是它们在游标对象上抛出了一个编程错误。

在此先感谢

+0

您是否尝试过使用预准备语句?看到[这个问题](http://stackoverflow.com/questions/1947750/does-python-support-mysql-prepared-statements) – 2011-02-15 23:04:46

回答

2

查询参数应提供所有适当的转义,例如:在

cursor.execute('INSERT INTO auth_user (password) VALUES (%s)', [password]) 

从Django文档:http://docs.djangoproject.com/en/dev/topics/db/sql/

如果你不熟悉 Python DB-API,请注意cursor.execute()中的SQL 语句使用 占位符,“%s”,rath呃直接在SQL中添加 参数。如果 您使用此技术,则根据需要,底层 数据库库将自动添加引号并转义到您的 参数。 (还要注意 该Django的期望“%S” 占位符,而不是“?”占位符, 其中使用由所述的SQLite的Python 绑定。这是为了 一致性和理智起见。)

+0

太好了,谢谢你payne – 2011-02-15 23:35:24