9
ビジネスロジックを検出 - 一つのカテゴリは、複数の(1:M)を有していてもよいが、カテゴリー「メモリ」のように、属性は属性の速度、サイズを持つことができ、同じでなどsqlalchemy.exc.CircularDependencyError:循環依存関係が
を入力時間1つのカテゴリーは、これがCategory.sortByAttribute内に格納されている(属性値によってソートすることができた - 。。LookupCategoryAttributesテーブルへの外部キーがある
SQLAlchemyのを経由して、それを構築しようとしているが、循環依存が検出され得ることは、何が間違っている
?class Attribute(Base):
__tablename__ = "LookupCategoryAttributes"
types = ["date", "float", "integer", "select", "string", "text"]
# Properties
ID = Column(BigInteger, primary_key=True)
categoryID = Column(BigInteger, ForeignKey('LookupCategories.ID'), nullable=False)
attribute = Column(VARCHAR(255), nullable=False)
listValues = Column(VARCHAR(4000))
typeID = Column(VARCHAR(40), nullable=False)
isRequired = Column(SmallInteger, nullable=False, default=0)
displayInMenu = Column(SmallInteger, nullable=False, default=0)
displayInFilter = Column(SmallInteger, nullable=False, default=0)
class Category(Base):
__tablename__ = "LookupCategories"
# Properties
ID = Column(BigInteger, primary_key=True)
category = Column(VARCHAR(255), nullable=False)
description = Column(VARCHAR(1000), nullable=False)
parentCategoryID = Column(BigInteger, ForeignKey('LookupCategories.ID'))
leftPos = Column(Integer)
rightPos = Column(Integer)
sortByAttribute = Column(BigInteger, ForeignKey('LookupCategoryAttributes.ID'))
sortOrder = Column(SmallInteger, default=1)
# Relationships
ParentCategory = relationship("Category", uselist=False, remote_side=[ID], backref='SubCategories')
SortByAttribute = relationship("Attribute", uselist=False, foreign_keys=[sortByAttribute], primaryjoin="Attribute.ID==Category.sortByAttribute")
Attributes = relationship("Attribute", backref="Category", primaryjoin="Attribute.categoryID==Category.ID")
し、コードは次のようになります。私は、実行時に私が取得コミット
category = Category(record['Name'], extID=extID)
attr1 = Attribute(v)
attr2 = Attribute(v)
category.Attributes.append(attr1)
category.Attributes.append(attr2)
category.SortByAttribute = attr1
:
sqlalchemy.exc.CircularDependencyError: Circular dependency detected.
以降SQLAlchemyの1.0からすることができます特定の状況のための潜在的use_alter =真:http://docs.sqlalchemy.org/en/latest/core/constraints.html#use-alter – Damian
申し訳ありませんが、他の方法では、use_alterは1.0より小さいバージョンで使用でき、1.0以上では実際にこれを自動的に検出して使用します。 – Damian
この回答のURLは移動しました。現在はhttp://docs.sqlalchemy.org/en/latest/orm/relationship_persistence.html#post-updateにあります。 –