との関係テーブルは、私がどのように見えるテーブルのセットがあります。SQLAlchemyの:複合主キー
workflows = Table('workflows', Base.metadata,
Column('id', Integer, primary_key=True),
)
actions = Table('actions', Base.metadata,
Column('name', String, primary_key=True),
Column('workflow_id', Integer, ForeignKey(workflows.c.id), primary_key=True),
)
action_dependencies = Table('action_dependencies', Base.metadata,
Column('workflow_id', Integer, ForeignKey(workflows.c.id), primary_key=True),
Column('parent_action', String, ForeignKey(actions.c.name), primary_key=True),
Column('child_action', String, ForeignKey(actions.c.name), primary_key=True),
)
を私のORMクラスは次のようになります。
class Workflow(Base):
__table__ = workflows
actions = relationship("Action", order_by="Action.name", backref="workflow")
class Action(Base):
__table__ = actions
children = relationship("Action",
secondary=action_dependencies,
primaryjoin=actions.c.name == action_dependencies.c.parent_action,
secondaryjoin=actions.c.name == action_dependencies.c.child_action,
backref="parents"
)
だから私のシステムでは、各アクションが一意ですワークフローIDとその名前の組み合わせによって識別されます。私は、それぞれのアクションが親と子のアクションを参照するparents
とchildren
属性を持つようにしたいと思います。各アクションは、複数の親と子を持つことができます。
問題は、私のような機能を持っている場合に発生します。私は関係が正しくworkflow_idを設定してもらうにはどうすればよい
IntegrityError: (IntegrityError) action_dependencies.workflow_id may not be NULL u'INSERT INTO action_dependencies (parent_action, child_action) VALUES (?, ?)' (u'directory_creator', u'packing')
:
def set_parents(session, workflow_id, action_name, parents):
action = session.query(db.Action).filter(db.Action.workflow_id == workflow.id).filter(db.Action.name == action_name).one()
for parent_name in parents:
parent = session.query(db.Action).filter(db.Action.workflow_id == workflow.id).filter(db.Action.name == parent_name).one()
action.parents.append(parent)
session.commit()
を私はのようなエラーが出ますか?
'action_dependencies'テーブルの' workflow_id'ですか? – van
アクションの主キーは、その名前とworkflow_idのコンポジットです。 workflow_idがaction_dependenciesにない場合、依存関係が参照していたワークフローのアクションを特定する方法はありません。 –
良い点、良い点。私は考えてみよう... – van