我有一个简单的一对多关系。我有Project
和Device
类。一个Project
可以有多个Device
。
当我使用这种关系将设备添加到项目中时,程序的行为不符合我的预期。
完整的程序在这里:
from sqlalchemy import Column, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Project(Base):
__tablename__ = "Projects"
name = Column('Name', String(50), primary_key=True)
devices = relationship("Device", back_populates="project")
class Device(Base):
__tablename__ = "Devices"
serial_no = Column('SerialNo', String(50), primary_key=True)
project_name = Column('ProjectName', String(50), ForeignKey("Projects.Name"))
project = relationship("Project", back_populates="devices", foreign_keys=[project_name])
if __name__ == "__main__":
p = Project(name="MyProject")
d = Device()
print("Before adding device:")
print(f"p.devices: {p.devices}")
print(f"d.project: {d.project}")
print(f"d.project_name: {d.project_name}")
p.devices.append(d)
print("After adding device:")
print(f"p.devices: {p.devices}")
print(f"d.project: {d.project}")
print(f"d.project_name: {d.project_name}")
这是输出:
Before adding device:
p.devices: []
d.project: None
d.project_name: None
After adding device:
p.devices: [<__main__.Device object at 0x000001FF049B22B0>]
d.project: <__main__.Project object at 0x000001FF03DB0D30>
d.project_name: None
除最后一个d.project_name
外,所有输出均符合预期。 d.project_name
仍返回None
。我希望这也将填充为MyProject
,因为d.project
返回了该项目对象。
我想念什么?