SQLAlchemy中的多对一关系 [英] Many-to-one relationship in SQLAlchemy

查看:134
本文介绍了SQLAlchemy中的多对一关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个初学者级别的问题。



我有一个类型的目录:

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

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

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

我正在通过创建以下模式在SQLAlchemy中执行此操作:

  Column('mtype_id',Integer,primary_key = True),
列('name',String(50),nullable = False,unique =列('对象',元数据,
列('obj_id',整数,primary_key = True),
列('),
$ b objs_table = mtype_id',None,ForeignKey('mtypes.mtype_id'))
列('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'对象没有属性'cascade_iterator'

任何想法?

解决方案

你尝试过:



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

而不是:

 列('mtype_id',无,ForeignKey('mtypes.mtype_id' ),

另请参见: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/schema.html#sqlalchemy.schema。 ForeignKey


This is a beginner-level question.

I have a catalog of mtypes:

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

and a catalog of Objects, which must have an associated mtype:

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

I am trying to do this in SQLAlchemy by creating the following schemas:

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")}
)

When I try to add a simple element like:

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

I get the error:

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

Any ideas?

解决方案

Have you tried:

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

instead of:

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

See also: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/schema.html#sqlalchemy.schema.ForeignKey

这篇关于SQLAlchemy中的多对一关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆