0

管理コマンドがあります

from django.db import connection
from django.core.management.base import BaseCommand   

class Command(BaseCommand):
    args = "[id]"

    def handle(self, id, **options):
    ids = []
    if '-' in id:
        splitted = id.split('-')
        for n in range(int(splitted[0]), int(splitted[1])+1):
            ids.append(n)
    else:
        ids.append(id)
    c = connection.cursor()
    c.execute('SELECT content FROM log WHERE id IN %s', [ids])

コマンド名を入力してパラメータ(id)を指定することでこれを実行できます

を実行するcommand 200-205と、forループはリストを返します。

ids =[200, 201, 202, 203, 204, 205]

そして、これをクエリに入れます:

SELECT content FROM log WHERE id IN (200, 201, 202, 203, 204, 205)

ブリリアント!

command 200IDを実行すると、次のようになります。

ids = [200]

クエリを実行すると、エラーが返されます。

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1")

SELECT content FROM log WHERE id IN (200)動作しているはずなのに動作していないようです。

私はここで何が間違っているのですか?

4

2 に答える 2

1

あなたのコードは私には問題ないように見えますが、私はそれらのDjangoライブラリに精通していません。いくつかの(おそらく明らかな)回避策のアイデア:(1)実行する2つの異なるSQLステートメントを作成します。1つのIDの場合、これも1つのIDの場合は単純SELECT content FROM log WHERE id =です(2)。目的のIDの2つのインスタンスを含む配列を作成し、DjangoがこのSQLを構築するようにしますSELECT content FROM log WHERE id IN (200, 200)。言い換えると、

else:
    ids.append(id)
    ids.append(id)
于 2012-05-31T17:17:44.083 に答える
0

かっこが抜けていませんか?

SELECT content FROM log WHERE id IN 200

対。

SELECT content FROM log WHERE id IN (200)
于 2012-05-31T15:21:11.043 に答える