例如,当我使用cursor.execute()
据记录:
>>> from django.db import connection
>>> cur = connection.cursor()
>>> cur.execute("DROP TABLE %s", ["my_table"])
django.db.utils.DatabaseError: near "?": syntax error
当不使用 Django 的参数替换时,查询将按预期工作:
>>> cur.execute("DROP TABLE my_table")
django.db.utils.DatabaseError: no such table: my_table
我究竟做错了什么?如何使参数化查询起作用?
Notes:
- 将查询添加后缀
;
没有帮助
- 根据文档,
%s
应该使用,而不是 SQLite 的?
(姜戈翻译%s
to ?
)
您不能在 SQL 语句中使用参数来代替标识符(列名或表名)。您只能使用它们来代替单个values.
相反,您必须使用动态 SQL 来构造整个 SQL 字符串,并将其以未参数化的方式发送到数据库(如果表名源自代码外部,请格外小心,避免注入)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)