我正在关注SQLAlchemy的文档,但无法获得所需的结果。有人可以告诉我代码有什么问题吗
Models.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}'
App.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
。
答案 0 :(得分:0)
在给定的代码中,绑定到phn1='4123-111-1234'
的{{1}}实例是在未向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)
后来,创建了一个雇员,然后可以查询特定名称的雇主,然后还可以将雇主的ID分配给该雇员,那么仍然可以达到相同的预期效果:
[Employee : John]
输出
employer = Employer(employer_name="DEF Corp")
session.add(employer)
session.commit()