0

したがって、列名をSQLクエリに入れようとしています

import sqlite3
db = sqlite3.connect('path/to/my/database.sqlite')
cur = db.cursor()

def get_val(field):
    return cur.execute('''
        SELECT x, y, :field FROM literal_table
        WHERE 
            :valid_field_name > 0 AND
            (some other conditions)
        GROUP BY x, y''',
        {'field': field}).fetchall()

get_val('valid_field_name')

しかし、コードを実行すると、列から値を取得する代わりに、python が返されます

[(x1, y1, u'valid_field_name'), (x2, y3, u'valid_field_name'), ...]

テーブル名をエンコードできないことは知っていますが、パラメータ化された列名のドキュメントに例があります。文字列の書式設定を使用してソリューションをハックしました (コードはプライベート データ処理用であるため、SQL インジェクションは問題になりません) が、何が起こっているのかを理解する必要があります!

私はPython 2.7.3を使用しています

4

1 に答える 1

1

SQLite は、パラメーターを指定された値に置き換えます。あなたの場合、これは次のようになります。

SELECT x, y, 'valid_field_name' FROM literal_table
WHERE 'valid_field_name' > 0 AND (some other conditions)
GROUP BY x, y

つまり、文字列は文字列です。パラメータを列名として持つことはできません。

于 2013-07-05T15:41:27.677 に答える