Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在sqlalchemy中访问上层类的子类?_Python_Sqlalchemy - Fatal编程技术网

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}")