Python 如何在sqlalchemy中访问上层类的子类?
我有三节课Python 如何在sqlalchemy中访问上层类的子类?,python,sqlalchemy,Python,Sqlalchemy,我有三节课 “公司”顶级its子类“部门”its子类“部门单元” 我可以访问这些值从“部门单元”级到顶级“公司”级的所有课程 尽管阅读了该文件,但我无法做到和理解的是 我无法从“company”类访问其他子类 我从子类访问上层类的代码: query = session.query(DepartmentalUnit) instance = query.all() for i in instance: print(i.department.company.name)
- “公司”顶级its子类“部门”its子类“部门单元”
- 我可以访问这些值从“部门单元”级到顶级“公司”级的所有课程
- 我无法从“company”类访问其他子类
query = session.query(DepartmentalUnit)
instance = query.all()
for i in instance:
print(i.department.company.name)
print(i.department.department_name)
print(i.departmental_unit_name)
我无法从company类访问其他子类的代码:
query = session.query(Company)
instance = query.all()
for i in instance:
print(i.department.department_name)
您的上一个查询应以不同方式使用:
- 关系名称中有一个输入错误:应该是
,而不是部门
部门
- 假设关系为1-N,则结果是一个列表,因此您应该迭代子对象
query = session.query(Company)
for company in query.all():
print(company.name)
for dep in company.departments:
print(" ", dep.department_name)
for dep_unit in dep.departmentalunits:
print(" ", dep_unit.departmental_unit_name)
我解决了这个问题。我为关系添加了一个backref,现在我可以从公司访问所有关系。不确定这是不是正确的方法?然而,我目前正在得到我想要的回报。我还没有未答复的请求 解决的示例:
class Company(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
name = Column(String)
departments = relationship('Department',backref='company',uselist=False)
class Department(Base):
__tablename__ = 'department'
id = Column(Integer, primary_key=True)
department_name = Column(String)
company_id = Column(Integer, ForeignKey('company.id'))
departmentalunits = relationship('DepartmentalUnit', backref='department',uselist=False)
class DepartmentalUnit(Base):
__tablename__ = 'departmentalunit'
id = Column(Integer, primary_key=True,nullable=False)
departmental_unit_name = Column(String)
departments_id = Column(Integer, ForeignKey('department.id'))
query = session.query(Company)
instance = query.all()
for i in instance:
print(f"Company: {i.name}")
print(f"Departmant: {i.departments.department_name}")
print(f"Departmant Unit: {i.departments.departmentalunits.departmental_unit_name}")
print( f"Report Category : {i.departments.departmentalunits.reportcategoryoftheunit.report_category_name}")
我通过给关系添加backref解决了这个问题。非常感谢你。
class Company(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
name = Column(String)
departments = relationship('Department',backref='company',uselist=False)
class Department(Base):
__tablename__ = 'department'
id = Column(Integer, primary_key=True)
department_name = Column(String)
company_id = Column(Integer, ForeignKey('company.id'))
departmentalunits = relationship('DepartmentalUnit', backref='department',uselist=False)
class DepartmentalUnit(Base):
__tablename__ = 'departmentalunit'
id = Column(Integer, primary_key=True,nullable=False)
departmental_unit_name = Column(String)
departments_id = Column(Integer, ForeignKey('department.id'))
query = session.query(Company)
instance = query.all()
for i in instance:
print(f"Company: {i.name}")
print(f"Departmant: {i.departments.department_name}")
print(f"Departmant Unit: {i.departments.departmentalunits.departmental_unit_name}")
print( f"Report Category : {i.departments.departmentalunits.reportcategoryoftheunit.report_category_name}")