3

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属性がありません...

4

0 に答える 0