python - SQLAlchemy 中的多对一关系

标签 python database-design sqlalchemy many-to-one

这是一个初级问题。

我有一个 mtypes 目录:

mtype_id name
       1 'mtype1'
       2 'mtype2'
[etc]

和一个对象目录,它必须有一个关联的mtype:

obj_id mtype_id name
     1        1 'obj1'
     2        1 'obj2'
     3        2 'obj3'
[etc]

我试图通过创建以下模式在 SQLAlchemy 中做到这一点:

mtypes_table = Table('mtypes', metadata,
 Column('mtype_id', Integer, primary_key=True),
 Column('name', String(50), nullable=False, unique=True),
)

objs_table = Table('objects', metadata,
 Column('obj_id', Integer, primary_key=True),
 Column('mtype_id', None, ForeignKey('mtypes.mtype_id')),
 Column('name', String(50), nullable=False, unique=True),
)

mapper(MType, mtypes_table)
mapper(MyObject, objs_table, 
 properties={'mtype':Relationship(MType, backref='objs', cascade="all, delete-orphan")}
)

当我尝试添加一个简单的元素时,例如:

mtype1 = MType('mtype1')
obj1 = MyObject('obj1')
obj1.mtype=mtype1
session.add(obj1)

我收到错误:

AttributeError: 'NoneType' object has no attribute 'cascade_iterator'

有什么想法吗?

最佳答案

你尝试过吗:

Column('mtype_id', ForeignKey('mtypes.mtype_id')),

而不是:

Column('mtype_id', None, ForeignKey('mtypes.mtype_id')),

另请参阅:https://docs.sqlalchemy.org/en/13/core/constraints.html

关于python - SQLAlchemy 中的多对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952010/

相关文章:

python - 如何在现有对象上显式加载关系?

python - sqlalchemy 反射(reflect)表到 orm?

Python,求和返回的MySQL数据

Javascript 模板字符串占位符

mysql - 通过 1 个查询获取 2 个相关组?

sql - 在 CREATE 的 CHECK 语句中使用 SQL 聚合函数

postgresql - 将列类型从 int 更改为 bigint 会释放空间吗?

python - 如何在 Python 中安装 blaze 模块(Continuum 分析)?

python - 上面的异常(没有这个表: oauth2_provider_accesstoken) was the direct cause of the following exception:

python - Postgres/SQLAlchemy/Alembic 将数据类型从 enum 更改为 int 并使用 map 值