9

PostgreSQL データベースにリンクされた psycopg2 でクエリを実行しています。問題のコードは次のとおりです。

with open('dataFile.txt', 'r') as f:
    lines = f.readlines()
    newLines = [line[:-1] for line in lines]
    curr=conn.cursor()
    lineString = ','.join(newLines)
    curr.execute("SELECT fields.fieldkey FROM fields LEFT JOIN zone ON zone.fieldkey=fields.fieldkey WHERE zone.zonekey = %s;", (newLines[0]))
    rows = curr.fetchall()

DB への接続に問題はなく、lines[0] のタイプは間違いなく文字列であることを確認しました。文字列フォーマットの構文に何か問題がありますか?

明確にするために、私が得るエラーはこれです:

TypeError: not all arguments converted during string formatting
4

1 に答える 1

24

lines[0]それをタプルにするには、後にコンマが必要です。

curr.execute("""
    SELECT fields.fieldkey
    FROM fields
    LEFT JOIN zone ON zone.fieldkey=fields.fieldkey
    WHERE zone.zonekey = %s;
""", (lines[0],))

executeメソッドはシーケンス (またはマッピング)を想定しているため、指定した文字列を括弧で囲んで反復処理します。したがって、それを明示的にタプルにする必要があります。tuplefunctionを使用して、より明確なコードで同じ結果を得ることができます。

(tuple(lines[0]))
于 2013-10-14T17:01:05.867 に答える