我正在使用SQLAlchemy和Mysql。我有一张发票表。它分享给不同的公司。像这样:
class Invoice(Base):
__tablename__ = 'invoice'
id = Column(Integer, primary_key=True)
company = Column(Integer)
invoiceNumber = Column(Integer)
当我创建新的发票时,invoiceNumber应该增加1,相对于该公司的最后一个invoiceNumber。每个公司的invoiceNumber必须不断增加和独特。
如何使用SQLAlchemy实现这一目标?
答案 0 :(得分:0)
您可以使用:
from sqlalchemy.event import listen
from sqlalchemy.sql.functions import func
from sqlalchemy import Column, Integer, UniqueConstraint
class Invoice(Base):
__tablename__ = 'invoice'
id = Column(Integer, primary_key=True)
company = Column(Integer)
invoiceNumber = Column(Integer)
__table_args__ = (UniqueConstraint(company, invoiceNumber),)
@staticmethod
def increment(mapper, connection, invoice):
last = Session.query(func.max(Invoce.invoiceNumber).label('last')\
.filter(Invoice.company == invoice.company).first()
invoice.last = last.last if last else 1
listen(Invoice, "before_insert", Invoice.increment)
这样的事情。 There are有关sqlalchemy事件监听器的更多信息。 或者,您可以实现database trigger,它将具有相同的逻辑