【发布时间】:2021-10-31 21:12:31
【问题描述】:
我在尝试使用外键添加新实体时遇到了一些 SQLAlchemy 命令式映射问题,例如。
如果我将映射类定义为:
@attr.s
class Foreign:
id = attr.ib(type=int, validator=optional(instance_of(int)), default=None)
name = attr.ib(type=str, validator=instance_of(str), default=None)
@attr.s
class Primary:
id = attr.ib(type=int, validator=optional(instance_of(int)), default=None)
foreign_id = attr.ib(type=int, validator=optional(instance_of(int)), default=None)
foreign = attr.ib(type=Foreign, validator=optional(instance_of(Foreign)), default=None)
当添加新实体时:
session.add(Primary(foreign_id=foreign_id))
session.commit()
它失败了,因为它用 None 替换了 foreign_id,因为我猜它期望填充外部属性。
这些是我的桌子:
mapper_registry = registry()
primary = Table(
"primary",
metadata,
Column("id", Integer, primary_key=True, autoincrement=True),
Column("foreign_id", Integer, ForeignKey("foreign.id"), nullable=False),
)
foreign = Table(
"foreign",
metadata,
Column("id", Integer, primary_key=True, autoincrement=True),
Column("name", String(20), nullable=False),
)
def configure_mappers():
mapper_registry.map_imperatively(Foreign, foreign)
def configure_mappers():
mapper_registry.map_imperatively(
Primary,
primary,
properties={
"foreign": relationship(Foreign),
},
)
但是,如果我从映射类中删除 foreign 属性,它就可以完美地工作。
如果我的映射类具有到外键和外键的映射,我是否可以使用外键添加新实体?
提前致谢
【问题讨论】:
标签: python sqlalchemy orm foreign-keys relationship