我正在使用 SQLAlchemy 和 Mysql。我有一张发票表。它为不同的公司共享。像这样:
class Invoice(Base):
__tablename__ = 'invoice'
id = Column(Integer, primary_key=True)
company = Column(Integer)
invoiceNumber = Column(Integer)
当我创建新发票时,与该公司的最后一个发票编号相比,发票编号应增加 1。发票编号必须不断增加并且每个公司都是唯一的。
如何使用 SQLAlchemy 实现这一目标?
最佳答案
你可以使用它:
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 ,这将具有相同的逻辑
关于python - SQLAlchemy:如何根据多个键自动递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352584/