-2

Python変数を使用してsqliteで連結を使用することは可能ですか?

たとえば、次のサンプル コードがあるとします。

conn=sqlite3.connect(...)
cursor=conn.cursor()

short_hostname = commands.getoutput('hostname -s')

sql='''
    INSERT INTO history
    SELECT id || '-' || ?, foo, bar, baz
    FROM info
'''
cursor.execute(sql,short_hostname)
conn.commit()

次のエラーが表示されます。TypeError: unsupported operand type(s) for -: 'str' and 'str' 実際に attach コマンドを使用して、複数のデータベースの結果をマスター データベースにマージしています。キーが一意であることを確認したいので、サーバーの短いホスト名をキーに追加します。

ありがとう、ポール

4

2 に答える 2

3

なんてこった!誰かが見逃した場合に備えて、OPのコメントは次のとおりです。

私の実際のコードは次のようなものです:

> cursor.execute('ATTACH "/home/vivisimo/reporting/temp.db" AS toMerge') 
> cursor.execute('INSERT INTO application SELECT id || '-' || ?, key, value FROM toMerge.application', [self.short_hostname])

それはあなたが投稿した質問と同じではありません。実際のコードには、INSERT ステートメントが三重引用符で囲まれていないという明らかな問題があります。したがって、実際にはPython に文字列から文字列を減算するように要求しています。

書く

cursor.execute('''INSERT INTO application SELECT id || '-' || ?, key, value FROM toMerge.application''', [self.short_hostname])

(元の質問であなたが言ったように)そしてすべてうまくいくでしょう。

于 2012-10-15T18:37:49.553 に答える
0

問題は SQLite ではなく、Python コードにあると確信しています。

次のようにコードを書き直すと、修正されるはずです。

sql="""
    INSERT INTO history
    SELECT id || '-' || ?, foo, bar, baz
    FROM info
"""
于 2012-10-15T17:49:26.860 に答える