SQLAlchemy で宣言型ベース モデルを使用していますが、コミット時に次の問題が発生します。
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 693, in commit
self.transaction.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 332, in commit
self._prepare_impl()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 311, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1788, in flush
self._flush(objects)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1870, in _flush
flush_context.execute()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 351, in execute
postsort_actions = self._generate_actions()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 325, in _generate_actions
for rec in cycles
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 325, in <genexpr>
for rec in cycles
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 542, in per_state_flush_actions
dep.per_state_flush_actions(uow, states_for_prop, False)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/dependency.py", line 162, in per_state_flush_actions
state, state.dict)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 699, in get_all_pending
if original not in (NEVER_SET, PASSIVE_NO_RESULT, None) and \
File ".../workspace/file.py", line 250, in __eq__
return self.foo == other.foo
AttributeError: 'symbol' object has no attribute 'foo'
foo が SQLAlchemy 以外のクラスであるモデルの属性である場合。これは、Python の「in」演算子が__eq__
リストのメンバーシップのチェックに依存しているためです。
問題は、__eq__
SQLAlchemy の癖に合わせて実装を変更しないようにする方法です。
other
ある種のutil.symbol
(具体的には)シナリオに明らかに対処できNEVER_SET
ますが、まだらだと思います。
アップデート
これは私の__eq__
方法です:
def __eq__(self, other):
return self.foo == other.foo
SQLAlchemy シンボルにはfoo
属性がありません...