15

PyOdbc Cursor から完全に参照された列名を取得したいと思います。たとえば、2 つの単純なテーブルがあるとします。

  • Table_1(Id, < some other fields >)
  • Table_2(Id, < some other fields >)

結合されたデータを取得したい

select * from Table_1 t1, Table2 t2 where t1.Id = t2.Id

次のように、pyodbc を使用します。

query = 'select * from Table_1 t1, Table2 t2 where t1.Id = t2.Id'

import pyodbc
conn_string = '<removed>'
connection =  pyodbc.connect(conn_string)

cursor = connection.cursor()cursor.execute(query)

次に、列名を取得します。

for row in cursor.description:
    print row[0]

しかし、これを行うと、Id2回取得しますが、これは望ましくありません。t1.Id理想的にt2.Idは、出力を得ることができました。

私が考えた解決策のいくつか (そして、私が実際にそれらを実装したくない理由):

  1. クエリの列の名前を変更します - 私の実際のユースケースでは、数十のテーブルがあり、中には頻繁に変更される数十の行があるものもあります
  2. クエリを解析し、S​​QL クエリの生成を自動化します (基本的に、テーブルのクエリをチェックし、cursor.tables 関数を使用して列を取得し、select *名前付き列のセットに置き換えます) - 私も持っている場合は、これを行いますが、テスト用ハーネスとしてはやり過ぎのようです

より良い方法はありますか?アドバイスをいただければ幸いです。

4

3 に答える 3

22

PyOdbcドキュメントオファー

# columns in table x
for row in cursor.columns(table='x'):
    print(row.column_name)

www.PyOdbc wiki API ドキュメントは便利です

于 2013-05-02T00:21:17.940 に答える