之前自己的一个表中的关系属性是:
| class Event(db.Model):     __tablename__ = “events”     joiners = db.relationship(‘User’, secondary=event_joiners) | 
打印出来类型是:
type(firstEvent.joiners)=<class ‘sqlalchemy.orm.collections.InstrumentedList’>
现在需要:
去搞懂:
sqlalchemy.orm.collections.InstrumentedList
有哪些方法
以便于我去使用
比如去query查询之类的
sqlalchemy.orm.collections.InstrumentedList
Collection Configuration and Techniques — SQLAlchemy 1.1 Documentation
“class sqlalchemy.orm.collections.InstrumentedList
Bases: __builtin__.list
An instrumented version of the built-in list.”
python – sqlalchemy: ‘InstrumentedList’ object has no attribute ‘filter’ – Stack Overflow
What is an InstrumentedList in Python? – Stack Overflow
去改为:
| joiners = db.relationship(‘User’, secondary=event_joiners, lazy=’dynamic’) | 
然后看看能不用用query,结果不行:
|     app.logger.debug(‘firstEvent=%s, firstEvent.creator=%s, type(firstEvent.joiners)=%s, firstEvent.joiners=%s’, firstEvent, firstEvent.creator, type(firstEvent.joiners), firstEvent.joiners) | 
会输出:
| DEBUG in db_create [db_create.py:176]: firstEvent=<Event id=1 user_openid=oswjmv4X0cCXcfkIwjoDfCkeTVVY title=u’\u8ba8\u8bba\u65e5\u5386\u7684\u516c\u4f17\u53f7\u540d\u5b57′>, firstEvent.creator=<User nickname=u’\u793c\u8c8c’ openid=oswjmv4X0cCXcfkIwjoDfCkeTVVY avatar_static_path=img/avatar/oswjmv4X0cCXcfkIwjoDfCkeTVVY.png>, type(firstEvent.joiners)=<class ‘sqlalchemy.orm.dynamic.AppenderBaseQuery’>, firstEvent.joiners=SELECT wechat_users.openid AS wechat_users_openid, wechat_users.province AS wechat_users_province, wechat_users.avatar_url AS wechat_users_avatar_url, wechat_users.avatar_static_path AS wechat_users_avatar_static_path, wechat_users.language AS wechat_users_language, wechat_users.city AS wechat_users_city, wechat_users.country AS wechat_users_country, wechat_users.sex AS wechat_users_sex, wechat_users.nickname AS wechat_users_nickname  FROM wechat_users, event_joiners  WHERE :param_1 = event_joiners.event_id AND wechat_users.openid = event_joiners.joiner_openid | 
What is an InstrumentedList in Python? – Stack Overflow
“Yes, SQLAlchemy uses it to implement a list-like object which is aware of insertions and deletions of related objects to an object (via one-to-many and many-to-many relationships).”
sqlalchemy.orm.collections.InstrumentedList – Nullege Python Samples
那么就去找python内部的list,有哪些函数和接口
python list
“Python列表函数&方法
Python包含以下函数:
| 序号 | 函数 | 
| 1 | 比较两个列表的元素 | 
| 2 | 列表元素个数 | 
| 3 | 返回列表元素最大值 | 
| 4 | 返回列表元素最小值 | 
| 5 | 将元组转换为列表 | 
Python包含以下方法:
| 序号 | 方法 | 
| 1 | 在列表末尾添加新的对象 | 
| 2 | 统计某个元素在列表中出现的次数 | 
| 3 | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) | 
| 4 | 从列表中找出某个值第一个匹配项的索引位置 | 
| 5 | 将对象插入列表 | 
| 6 | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 | 
| 7 | 移除列表中某个值的第一个匹配项 | 
| 8 | 反向列表中元素 | 
| 9 | 对原列表进行排序 | 
“
->看来没法去query加上filter了
只能自己去循环中,获取每一个变量,然后去判断了。。。
| curEvent = Event.query.filter_by(id=eventIdInt).first() app.logger.debug(“curEvent=%s”, curEvent) curEventJoiners = curEvent.joiners app.logger.debug(“curEventJoiners=%s”, curEventJoiners) hasJoined = False for eachJoiner in curEventJoiners:     if eachJoiner.openid == sourceUser.openid:         hasJoined = True         break if hasJoined:     respContent = u”您已经加入了该活动: %s” % (curEvent.title) else:     curEvent.joiners.append(sourceUser) db.session.commit()     respContent = u”已成功将您加入了活动: %s” % (curEvent.titile) | 
转载请注明:在路上 » [已解决]sqlalchemy.orm.collections.InstrumentedList看看有哪些方法