У меня есть база данных, которая была определена с помощью SQLAlchemy ORM. Теперь у меня есть связь между таблицами (скажем, parents
между таблицами Parent
и Child
), к которой я могу получить доступ и получить объекты строк, связанные с этой записью (2 родительских объекта, связанных с одним дочерним объектом).
Теперь я хочу вернуть фрейм данных, содержащий все родительские объекты, связанные с этим дочерним объектом.
Я знаю, что есть метод pd.read_sql
, но он работает только с запросами, а не со списком объектов таблицы. Конечно, я могу просто сделать команду SQL-запроса, которая выбирает только тех родителей, которые связаны с этим child_id, но это кажется мне излишним, потому что у меня уже есть информация, какие родители принадлежат этому ребенку.
Есть ли простой и эффективный способ превращения этих родительских объектов в один родительский фрейм данных?
from sqlalchemy import (Column, Integer, ForeignKey)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
import pandas as pd
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
child_id = Column(Integer, ForeignKey('child.id'))
child = relationship("Child", backref="parents")
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
p1 = Parent()
p2 = Parent()
c1 = Child()
c1.parents.append(p1)
c1.parents.append(p2)
# this does not work:
pd.read_sql(c1.parents, someengine)