23

このsqlite3クエリをPythonで実行しようとしています。コードを最小限に抑えました。sqlite.connectなどが機能します。

column = 'Pron_1_Pers_Sg'
goal = 'gender' 
constrain = 'Mann'


with con:
    cur = con.cursor()

    cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain))
    con.commit()

    rows = cur.fetchall()

    for element in rows:
        values.append(element)

これにより、空のリストが返されます。文字列をハードコーディングすると、機能して値を返します。

4

3 に答える 3

42

パラメータ マーカーは、式、つまり値に対してのみ使用できます。テーブル名や列名などの識別子には使用できません。

これを使って:

cur.execute("SELECT "+column+" FROM Data where "+goal+"=?", (constrain,))

またはこれ:

cur.execute("SELECT %s FROM Data where %s=?" % (column, goal), (constrain,))

(実際にデータへのアクセスを完了する前にコミットしないでください。)

于 2012-12-14T15:01:36.980 に答える
-1

私は今日、まったく同じような問題を抱えていました。これで問題が解決するかどうかはわかりません:

cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain,))

重要なのは最後の,

試してみてください。これは私のコードの問題でした-おそらくそれもあなたを助けるでしょう. 申し訳ありませんが、私は自分自身を学んでいて、数週間 python/sqlite に夢中になっているため、実際に理由を説明できません。

于 2012-12-14T14:46:45.790 に答える