[英]Backref in SQLAlchemy returns empty list
我正在關注 SQLAlchemy 的文檔,但我無法獲得所需的結果。 有人可以指出我的代碼有什么問題嗎
模型.py
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Employer(Base):
__tablename__ = 'employer_table'
id = Column(Integer, primary_key=True)
employer_name = Column(String)
employee = relationship("Employee", backref="employer_table")
def __repr__(self):
return f'Employer : {self.employer_name}'
class Employee(Base):
__tablename__ = 'employee_table'
id = Column(Integer, primary_key=True)
employer_id = Column(Integer, ForeignKey('employer_table.id'))
employee_name = Column(String)
def __repr__(self):
return f'Employee : {self.employee_name}'
應用程序.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import Person, Employer, Employee
# Create the engine
engine = create_engine('sqlite:///:memory:', echo=False)
Session = sessionmaker(bind=engine)
session = Session()
# Create All Tables
Employer.metadata.create_all(engine)
Employee.metadata.create_all(engine)
employer = Employer(employer_name="ABC Corp")
employee = Employee(employee_name="John")
session.add(employer)
session.add(employee)
session.commit()
print(employer.employee)
我只是得到空列表。 我最初嘗試不使用backref
來理解relationships
,但它似乎也不適用於backref
。
在給出的代碼中,綁定到employer
的Employer
實例是在沒有添加任何Employee
實例(例如通過append
)到employer.employee
的情況下創建的,也沒有在沒有引用employee
的情況下創建employer
實例。 解決此問題的一種快速方法是在創建兩個實例后添加以下行:
employer.employee.append(employee)
現在運行以下命令:
employer = Employer(employer_name="ABC Corp")
employee = Employee(employee_name="John")
employer.employee.append(employee)
session.add(employer)
session.add(employee)
session.commit()
print(employer.employee)
產生這個 output:
[Employee : John]
或者,如果首先添加雇主:
employer = Employer(employer_name="DEF Corp")
session.add(employer)
session.commit()
之后再創建一個employee,然后可以查詢特定名字的employee,然后也可以將employee的id分配給employee,那么還是可以達到同樣的效果:
employer = session.query(Employer).filter(
Employer.employer_name=='DEF Corp').first()
employee = Employee(employee_name="Mary")
employee.employer_id = employer.id
session.add(employee)
session.commit()
print(employer.employee)
Output
[Employee : Mary]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.