我想有两个用外键连接的表。我想在我调用sqlalchemy.select([table1,table2])时将左联接设置为默认行为。在当前代码中,我得到了外部联接,问题是我想与左联接一对一关系,这将导致仅两行sqlalchemy.select([table1, table2])
com,如果table1和table2也有两行,但是现在我得到了四行行。
我已阅读sqlalchemy外键和联接的basic和advanced教程,但仍然无法弄清楚。我还阅读了即使我有外键也需要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()```