使用关系时,SQLAlchemy不会自动填充外键字段

时间:2019-09-01 09:37:13

标签: python orm sqlalchemy

我有一个简单的一对多关系。我有ProjectDevice类。一个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返回了该项目对象。

我想念什么?

0 个答案:

没有答案
相关问题