2016-08-16 1 views
2

私はクラスの新しいインスタンスがインスタンス化されるたびに新しい列で更新されているテーブルを持っています。ここに私のコードがあります。pythonで変数としてpostgresテーブルの列を指定するには?

query = "alter table test add column %s integer" 
rows = (str(Driver.count), str(Driver.count+1)) 
for c in rows: 
    cur.execute(query, (AsIs(c),)) 
conn.commit() 

Driver.countは、クラスの新しいインスタンスごとに増分されるカウンタです。私は指定しています2列が変数です

cur.execute("INSERT INTO test (str(Driver.count), str(Driver.count+1)) \ 
VALUES (%d, %d)" % (currentRow,currentCol)); 

:私は、テーブルを更新する際に今、私はこのようなコマンドを使用します。挿入する値を指定するときのように、カラム変数が何らかの形で引用符の外にある必要があるため、上記のコマンドは機能しません。これどうやってするの?

+0

を、それが正しいのですか? – Nicarus

+0

Johnの答えがあなたには役立ちますが、数値を列名として使用することは悪い考えです。可能であれば、 'dc1、dc2、... 'のように数字の前に文字列を付加してください。 – Nicarus

答えて

2
cur.execute('INSERT INTO test ("%d", "%d") VALUES (%d, %d)' 
    % (Driver.count, Driver.count+1, currentRow, currentCol)) 

以降の構文を使用して:あなたの列名が数字になります

cur.execute('INSERT INTO test ("{}", "{}") VALUES ({}, {})'.format(
    Driver.count, Driver.count+1, currentRow, currentCol)) 
+1

これらのカラム名が数字の場合、PostgreSQLでエラーが出る可能性があります。列名に二重引用符が付いていることを確認する必要があります。 "..." INSERT INTOテスト( "{}"、 "{}")VALUES({}、{}) 'フォーマット(...' – Nicarus

+0

@Nicarus:良い点、私は自分の答えを更新しました –

+0

これはまだ正しくありません。一重引用符ではなく二重引用符を使用する必要があります。 – Nicarus

関連する問題