python-SQLAlchemy-MappedCollection问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-SQLAlchemy-MappedCollection问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1372字,纯文字阅读大概需要2分钟。
内容图文
我在Python的SQLAlchemy中设置字典集合时遇到一些问题:
我正在使用表的声明性定义.我有与记录表1:N关系中的项目表.我使用以下代码建立关系:
_Base = declarative_base()
class Record(_Base):
__tablename__ = 'records'
item_id = Column(String(M_ITEM_ID), ForeignKey('items.id'))
id = Column(String(M_RECORD_ID), primary_key=True)
uri = Column(String(M_RECORD_URI))
name = Column(String(M_RECORD_NAME))
class Item(_Base):
__tablename__ = 'items'
id = Column(String(M_ITEM_ID), primary_key=True)
records = relation(Record, collection_class=column_mapped_collection(Record.name), backref='item')
现在,我要处理项目和记录.让我们创建一些对象:
i1 = Item(id='id1')
r = Record(id='mujrecord')
现在,我想使用以下代码关联这些对象:
i1.records['source_wav'] = r
但是Record r尚未设置name属性(外键).有什么解决方案如何自动确保这一点? (我知道在Record创建过程中设置外键是可行的,但这对我来说听起来并不好).
非常感谢
解决方法:
您想要这样的东西:
from sqlalchemy.orm import validates
class Item(_Base):
[...]
@validates('records')
def validate_record(self, key, record):
assert record.name is not None, "Record fails validation, must have a name"
return record
这样,您将获得所需的验证:
>>> i1 = Item(id='id1')
>>> r = Record(id='mujrecord')
>>> i1.records['source_wav'] = r
Traceback (most recent call last):
[...]
AssertionError: Record fails validation, must have a name
>>> r.name = 'foo'
>>> i1.records['source_wav'] = r
>>>
内容总结
以上是互联网集市为您收集整理的python-SQLAlchemy-MappedCollection问题全部内容,希望文章能够帮你解决python-SQLAlchemy-MappedCollection问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。