Я хочу иметь две таблицы, связанные с внешними ключами. Я хочу установить левое соединение как поведение по умолчанию, когда я вызываю sqlalchemy.select ([table1, table2]). В текущем коде я получаю внешнее соединение, и проблема заключается в том, что мне нужно взаимно-однозначное отношение с левым соединением, которое должно привести к тому, что только две строки команды sqlalchemy.select([table1, table2])
, если table1 и table2 также имеют 2 строки, но теперь я получаю четыре строки.
Я прочитал базовый и расширенный учебник по внешним ключам и соединениям sqlalchemy, но все еще не могу понять это. Я также прочитал, что мне нужно LEFT JOIN
в запросе, даже если у меня есть внешние ключи, это правильно, даже с sqlalchemy?
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
#create db, session, base
engine = create_engine('sqlite:///:memory:')
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
#create tables
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
name_p = Column(String)
child = relationship("Child", uselist=False, backref="parent")
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
name_c = Column(String)
parent_id = Column(Integer, ForeignKey('parent.id'))
Base.metadata.create_all(engine)
#fill tables with data
joe1 = Child(name_c='joe1')
jane1 = Parent(name_p='jane1', child=joe1)
joe2 = Child(name_c='joe2')
jane2 = Parent(name_p='jane2', child=joe2)
session.add_all([joe1, joe2, jane1, jane2])
session.commit()```