我有一个像这样的Category对象:
def parent_default(context):
''' default parent id if the name is not root '''
id_ = None
if context.current_parameters['name'] != u'root' :
id_ = 1
return id_
class Category(Base):
''' Class representing a product category. '''
__tablename__ = "CATEGORY"
id = Column(Integer, primary_key=True)
name = Column(Unicode(50), nullable=False)
#self-referential mapper
parent_id = Column(Integer, ForeignKey('CATEGORY.id'), default=parent_default)
products = relationship("Product", backref="products")
parent = relationship('Category', remote_side=[id], backref='sub_categories')
__table_args__ = (
UniqueConstraint('parent_id', 'name'),
)
我遇到的问题是我能够用None'parent_id'创建两个'root'对象,似乎UniqueConstraint不适用于None'parent_id'?.理想情况下,只有一个对象具有None parent_id。我必须在这里遗漏一些东西。
答案 0 :(得分:3)
元组NULL, 'root'
是否唯一有点不同,从DBMS到DBMS;最近有人将其添加到sql标准中。在大多数情况下,并非唯一,毕竟NULL = NULL
不是真的。
您已经要求根元组的id
为1,因此您可以安全地从父ID中删除nullable = True;然后只需将根对象设置为自己的父对象。