【发布时间】:2014-10-02 17:28:31
【问题描述】:
我已经做了一些阅读和谷歌搜索,但我仍然不确定是否有本机/内置方法可以在 SQLAlchemy 对象中创建映射属性,从而为类似方案创建类似集合的属性:
User UserTag
+----+-----------------+ +---------+-----------+
| id | email | | user_id | tag |
+----+-----------------+ +---------+-----------+
| 1 | foo@example.com | | 1 | footag |
| 2 | bar@example.com | | 1 | something |
+----+-----------------+ | 1 | tagbar |
| 2 | something |
| 2 | 3rdtag |
+---------+-----------+
这样每个 User 对象都有一个 User.tags 映射属性,它是(或行为类似)一组字符串 - 例如以下将起作用:
>>> user = session.query(User).filter(User.id == 1).one()
>>> print user.tags
set(['tagbar', 'something', 'footag'])
【问题讨论】:
-
你需要一套什么特别的东西?独特性? O(1) 查找?
-
好吧,两者都有,虽然老实说查找时间并不重要,因为我不希望映射值的数量很大;每个用户最多可以有 10 个左右的标签,主要是我想知道
'tagbar' in user.tags。映射表在 (user_id, tag) 上定义了一个唯一键,因此在数据库级别保证了唯一性。对我来说,有一个集合或类似集合的数据结构才有意义。
标签: python sql orm sqlalchemy set