эквивалент в pandas для соединения SQL с таблицами запросов по внешним ключам - PullRequest
0 голосов
/ 18 февраля 2019

Этот вопрос может быть связан с объединением или объединением с перезаписью в pandas

Но я имею в виду объединение SQL, а не объединение панд: я ищу эквивалент SQL для таблиц запросов повнешние ключи:

Пример: я хочу выбрать поля из таблицы проекта, чей project_id является внешним ключом в таблице клиентов, client_id которого является внешним ключом в таблице рабочих времен и т. д.

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

import psycopg2 as pg
import pandas.io.sql as psql

# get connected to the database
connection = pg.connect("dbname=my_database user=postgres")

df = psql.read_sql("""SELECT * FROM table.bpartner client
JOIN table.project project ON client.bpartner_id = project.bpartner_id
JOIN table.project_usertime workingtime ON workingtime.project_id = project.project_id
""", connection)

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

Я удаляю дубликаты столбцов следующим образом:

# remove duplicated columsn > TODO check SQL Join || pandas merge / group_by to handle better
df = df.loc[:, ~df.columns.duplicated()]

В противном случае я мог бы также создать три кадра данных, по одному для каждой таблицы:

df1  = psql.read_sql("SELECT * FROM table.project", connection)
df2  = psql.read_sql("SELECT * FROM table.bpartner", connection)
df3  = psql.read_sql("SELECT * FROM table.project_usertime", connection)

Интересно, каким может быть запрос панд, чтобы теперь объединить три кадра данных без дубликатов столбцов, что эквивалентноSQL-соединение между несколькими таблицами по внешнему ключу - я имею в виду, когда запросы на соединение выражают «деловые отношения» между таблицами (если и только если два объекта связаны между собой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...