私はデータベース(Python、Postgres)から取得した結果セットのフィールドのテーブル名を取得しようとしています。フィールドにテーブル名を取得する関数がPHPであり、私はそれを使用したので、それが動作することがわかっています(PHPで)。私はPythonで同様の関数を探しています。データベース結果のフィールドのテーブル名をPython(PostgreSQL)
pg_field_table() PHPの関数は結果とフィールド番号を取得し、 "フィールドが属するテーブルの名前を返します"。それはまさに私が必要とするものですが、Pythonではそうです。
シンプルexaple - 、行を挿入し、選択したデータをテーブルを作成します。
CREATE TABLE table_a (
id INT,
name VARCHAR(10)
);
CREATE TABLE table_b (
id INT,
name VARCHAR(10)
);
INSERT INTO table_a (id, name) VALUES (1, 'hello');
INSERT INTO table_b (id, name) VALUES (1, 'world');
をpsycopg2
かsqlalchemy
を使用している場合、私は右のデータと右フィールド名を得たが、テーブル名の情報なし。
import psycopg2
query = '''
SELECT *
FROM table_a A
LEFT JOIN table_b B
ON A.id = B.id
'''
con = psycopg2.connect('dbname=testdb user=postgres password=postgres')
cur = con.cursor()
cur.execute(query)
data = cur.fetchall()
print('fields', [desc[0] for desc in cur.description])
print('data', data)
上記の例では、フィールド名が表示されています。出力は次のとおりです。
fields ['id', 'name', 'id', 'name']
data [(1, 'hello', 1, 'world')]
私はcursor.description
があることを知っているが、それは、テーブル名、単にフィールド名が含まれていません。
必要なもの - 未処理のSQLを使用してデータを照会するときに、結果セットのフィールドのテーブル名を取得する方法がいくつかあります。
EDIT 1: "hello"が "table_a"または "table_b"から来たかどうかを知る必要があります。両方のフィールドの名前は同じです( "name")。テーブル名に関する情報がなければ、値がどのテーブルであるかを知ることができません。
EDIT 2:私は、SQLの別名のようないくつかの回避策があることを知っている:SELECT table_a.name AS name1, table_b.name AS name2
は、私は実際に結果セットからテーブル名を取得する方法を求めています。時々私は私がすべての生のSQLクエリを記述することができます解決策を探しています、SELECT *
、時々と、そのクエリを実行した後、私はフィールド名と、結果セットのフィールドのテーブル名を取得します:
EDIT 3。
クエリを実行したときにすでにテーブル名を知っていました。 – e4c5
SQLエイリアスを使用する – polku
'Output'ノードで' explain(verbose) 'から情報を得ることができます。あなたの例では、出力は 'Output:A.id、A.name、B.id、B.name'です。 'format'オプションを使用して、希望するフォーマットの情報を取得します:' explain(verbose、format json)... 'しかし、どのような複雑なクエリは 'のような最高の(A.name、B.name)から名前を選択...'ソーステーブルは、各行のさまざまなことができますか? –
Abelisto