2016-10-25 2 views
-2

Я обращаюсь к базе данных SQL-сервера с помощью python. База данных содержит около 200 таблиц и содержит внешние ключи между таблицами.Автоматическое объединение таблиц с использованием внешних ключей в SQL-сервере, pyodbc

Я хочу присоединиться к таблицам автоматически, используя внешние ключи, которые находятся в базе данных, так как делать это вручную очень утомительно.

Как создать кадры данных pandas из всех возможных возможных объединений таблиц с использованием заданных внешних ключей?

С pyodbc, я могу успешно получить каждую конкретную таблицу после создания соединения с этой строки кода:

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

ИТС неясно, что вы просите – tuergeist

+0

@tuergeist База данных содержит таблицы и внешние ключи между ними, что все, что нужно для вычисления соединения между каждыми двумя таблицами, имеющими внешний ключ между ними. Я хочу многократно присоединяться ко всем таблицам, пока я могу создать несколько больших таблиц. – User9123

+0

Пока неясно, является ли это вопросом python или базой данных – tuergeist

ответ

0

Это не стандартная функция SQL. Вам нужно будет запросить таблицы системных схем для отношений &, а затем самостоятельно создать запросы, возможно, используя левые соединения. Я сейчас пытаюсь что-то подобное, вот SQL, который я использую, чтобы получить отношения с SQL Server.

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; 
Смежные вопросы