2

複数の大文字と小文字を区別する列を使用して、python の pgdb を使用してクエリを実行する際に問題があります。ほとんどのクエリの結果は python リストを返しますが、大文字と小文字を区別する複数の列を指定するテーブルに対してクエリを発行すると、結果はstring.

booleanたとえば、次の名前の 3 つの大文字と小文字を区別する列を持つ PostgreSQL データベースのテーブルがあります。

(colA, colB, debug)

複数の列を選択することに興味がある場合はstring、クエリから生の結果を受け取ります。

query = 'SELECT ("colA", debug) FROM my_table;"

また

query = 'SELECT ("colA", "colB") FROM my_table;"

クエリは次を返します。

cursor.execute(query)
cursor.fetchone()
['(f,f)']

次のクエリを発行します。

query = "SELECT * FROM my_table;"
cursor.execute(query)
cursor.fetchone()

予想される python リストが得られます。

[False, False, False]

1 つの列を引用符で囲んで指定すると、結果が期待されます。

query = 'SELECT ("colA") FROM my_table;'
cursor.execute(query)
cursor.fetchone()
[False]

string大文字と小文字を区別する複数の列を選択したときにraw を受け取る理由を理解するために、誰かが私を正しい方向に向けてくれることを願っています。問題を解決するために複数のクエリを発行することもできますSELECT *が、堅牢なコードを維持し、テーブルへの将来の変更から身を守るために、列を指定することをお勧めします。

4

1 に答える 1

1

複数のカウントを括弧で囲むと、アドホックな行タイプが形成され、単一の値が返されます。

SELECT ("colA", "colB") FROM my_table;

括弧を削除して、個々の列を取得します。

SELECT "colA", "colB" FROM my_table;

二重引用符について疑問がある場合は、マニュアルの識別子に関する章をお読みください。私の常々のアドバイスは、正当な小文字の識別子を PostgreSQL でのみ使用することです。

于 2013-09-20T16:11:15.213 に答える