2016-10-25 7 views
-2

私はPythonを使用してSQLサーバーのデータベースにアクセスします。データベースには約200のテーブルがあり、テーブル間に外部キーが含まれています。SQLサーバーの外部キーを使用してテーブルを自動的に結合するpyodbc

データベースにある外部キーを使用してテーブルに自動的に参加したいのですが、手動で行うのは非常に面倒です。

与えられた外部キーを使用してテーブルのすべての最大結合のpandasデータフレームを作成するにはどうすればよいですか?

pyodbcで、私は正常にこのコード行との接続を作成した後、それぞれ特定のテーブルを取得することができます:

cnxn = pyodbc.connect("...") 
+0

不明確その何をデータベース@tuergeist – tuergeist

+0

を求めているのは1がそれらの間の外部キーを持つすべての2つのテーブル間の結合を計算するために必要な全てである、テーブルとそれらの間の外部キーが含まれています。私はいくつかの大きなテーブルを作成することができる限り、すべてのテーブルに繰り返し参加したいです。 – User9123

+0

これがPythonかデータベースの質問かどうかはまだ不明です – tuergeist

答えて

0

これは、SQLの標準機能ではありません。関係&のシステムスキーマテーブルを照会し、おそらく左の結合を使用して、自分で照会を作成する必要があります。 私は現在、似たようなことをしようとしています。ここでは、SQL Serverとの関係を得るために使用しているSQLがあります。

with fKC as 
(
    select 
      sfkc.constraint_object_id 
      ,(select name from sys.objects as o where o.object_id=sfkc.constraint_object_id) as constraint_object_name 
      ,sfkc.parent_object_id 
      ,(select name from sys.objects as o where o.object_id=sfkc.parent_object_id) as parent_object_name 
      ,sfkc.parent_column_id 
      ,(select name from sys.columns as c where ((c.object_id=sfkc.parent_object_id)and(c.column_id=sfkc.parent_column_id))) as parent_column_name 
      ,sfkc.referenced_object_id 
      ,(select name from sys.objects as o where o.object_id=sfkc.referenced_object_id) as referenced_object_name 
      ,sfkc.referenced_column_id 
      ,(select name from sys.columns as c where ((c.object_id=sfkc.referenced_object_id)and(c.column_id=sfkc.referenced_column_id))) as referenced_column_name 
    from sys.foreign_key_columns as sfkc 
    where (sfkc.parent_object_id!=sfkc.referenced_object_id) 
) 

select * 
from fKC 
order by fKC.parent_object_name, fKC.referenced_object_name; 
関連する問題