ORM:默认情况下强制左连接

时间:2019-06-24 10:43:38

标签: python sql sqlalchemy

我想有两个用外键连接的表。我想在我调用sqlalchemy.select([table1,table2])时将左联接设置为默认行为。在当前代码中,我得到了外部联接,问题是我想与左联接一对一关系,这将导致仅两行sqlalchemy.select([table1, table2]) com,如果table1和table2也有两行,但是现在我得到了四行行。

我已阅读sqlalchemy外键和联接的basicadvanced教程,但仍然无法弄清楚。我还阅读了即使我有外键也需要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()```

0 个答案:

没有答案