我正在使用MySQLdb开发Python项目。作为其中的一部分,我正在将用户详细信息(包括盐渍密码)从一个生成它们的系统移动到一个只使用它们的新系统。
单引号,双引号或三引号可以描绘您的字符串开头和结尾。但是,单引号和双引号是我正在迁移的4.5k左右用户中几个哈希的一部分。两种代币都出现在约450种盐中。
该代码的编辑版本如下
Django.execute ('INSERT INTO auth_user (password) VALUES ("' + user.password + '")')
我尝试在此数据库游标对象中使用的引用类型之间进行交换,当检测到引用类型或其他引用类型时,但是这仍然包含大约包含两者的150左右。
我可以使用哪些方法来解决这个问题?
我尝试过三重引号,但它们会在游标对象上抛出编程错误。
提前致谢
答案 0 :(得分:2)
查询参数应提供所有正确的转义,例如:
cursor.execute('INSERT INTO auth_user (password) VALUES (%s)', [password])
来自Django文档:http://docs.djangoproject.com/en/dev/topics/db/sql/
如果你不熟悉 Python DB-API,请注意SQL cursor.execute()中的语句使用 占位符,“%s”,而不是添加 直接在SQL中的参数。如果 你使用这种技术,潜在的 数据库库会自动生成 添加引号并转义到您的 参数必要时。 (另请注意 Django期待“%s” 占位符,而不是“?”占位符, 这是SQLite Python使用的 绑定。这是为了 一致性和理智。)