2

たとえば、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

私は何が間違っているのですか?パラメータ化されたクエリを機能させるにはどうすればよいですか?

ノート:

  • クエリにサフィックスを付けて;も効果はありません
  • ドキュメントによると、%sSQLiteではなく使用する必要があります?(Djangoはに変換%sされ?ます)
4

2 に答える 2

7

SQLステートメントで識別子(列名またはテーブル名)の代わりにパラメーターを使用することはできません。単一の値の代わりにのみ使用できます。

代わりに、動的SQLを使用してSQL文字列全体を作成し、パラメーター化せずにデータベースに送信する必要があります(テーブル名がコードの外部にある場合は、挿入を避けるように特に注意してください)。

于 2012-04-05T02:52:06.253 に答える
3

パラメータ化されたクエリでメタデータを置き換えることはできません。

于 2012-04-05T02:51:57.717 に答える