我有一个小问题,我认为 SQL Alchemy 应该可以轻松处理它,但我似乎无法正确处理。我有两张表,一张是父表,另一张是子表。对于每个子记录,它需要一个唯一的 ID,但仅与唯一父记录的上下文有关。
我正在使用声明性基础方法。
我使用 FK 和关系函数设置父子关系。我想要实现的是获得类似于伪自动增量函数的东西,它将查找类别唯一名称组中的最大 CategoryID 值并将其递增一。我尝试过使用各种默认函数,但遇到的问题是无法在插入时指定 CategoryUniqueName。我找不到传递 CategoryItems.CategoryUniqueName 的当前值的方法,以便在尝试选择诸如 func.max(CategoryItems.CategoryID) 之类的内容时应用正确的过滤器。如果我对查询进行硬编码,它就可以正常工作。这就是我认为应该起作用的方法,但是,我再次找不到为过滤器指定唯一值的方法。
unique_group='my_group'
result=con.query(func.max(CategoryItems.CategoryID)).filter(and_(
CategoryItems.CategoryUniqueName==unique_group,
)).one()
类如下所示。非常感谢有关如何在标准 SQL Alchemy 中完成此操作的一些指导。我知道我总是可以查找该值并直接在同一个事务中指定它,但我正在尝试提出一种独立的 SQL Alchemy 方法,该方法不需要其他地方的额外逻辑。
class Category(Base):
__tablename__ = 'parent_table'
__table_args__ = {'mysql_engine':'InnoDB', 'useexisting':True}
CategoryUniqueName = Column(Unicode(255), primary_key=True)
CategoryGroupName = Column(Unicode(255), nullable=False)
CategoryGroupMemo = Column(UnicodeText)
SortOrder = Column(Integer, index=True)
IsLocked = Column(Boolean, default=0)
class CategoryItems(Base):
__tablename__ = 'child_table'
__table_args__ = {'mysql_engine':'InnoDB', 'useexisting':True}
CategoryUniqueName = Column(Unicode(255), ForeignKey(Category.CategoryUniqueName), primary_key=True)
CategoryID = Column(Integer, primary_key=True, autoincrement=False)
CategoryName = Column(Unicode(255), nullable=False, index=True)
CategoryMemo = Column(UnicodeText)
CategoryImage = Column(Unicode(255))
CategoryFlex1 = Column(Unicode(255), index=True)
CategoryFlex2 = Column(Unicode(255), index=True)
CategoryFlex3 = Column(Unicode(255), index=True)
SortOrder = Column(Integer, index=True)
category_group = relation(
Category,
backref=backref(
'items',
order_by=SortOrder,
collection_class=ordering_list('SortOrder'),
cascade="all, delete, delete-orphan"
))