SQLAlchemy:如何基于多个键自动增加?

时间:2015-12-18 09:44:03

标签: python mysql sqlalchemy

我正在使用SQLAlchemy和Mysql。我有一张发票表。它分享给不同的公司。像这样:

class Invoice(Base):
    __tablename__ = 'invoice'
    id = Column(Integer, primary_key=True)
    company = Column(Integer)
    invoiceNumber = Column(Integer)

当我创建新的发票时,invoiceNumber应该增加1,相对于该公司的最后一个invoiceNumber。每个公司的invoiceNumber必须不断增加和独特。

如何使用SQLAlchemy实现这一目标?

1 个答案:

答案 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,它将具有相同的逻辑