python - SQLAlchemy:如何根据多个键自动递增?

标签 python mysql sqlalchemy

我正在使用 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/

相关文章:

python - NLTK 分类器对象

python - 两个不同数据帧(dfs)中单词之间的字符串文字匹配并生成一个新的数据帧

mysql - 制表符表不呈现某些列值。想知道为什么?

mysql - 使用 MySQL 查询,如果字段具有特定值,则将其包含在 SELECT 查询中,否则不包含它

python - multiprocessing - 执行外部命令并在继续之前等待

python - 来自字典的DataFrame

php - 如何在 PHP 中跳过结果集中的行?

python - 如何使用 Flask-SQLalchemy 从现有表创建类

python - 跨文件的 SQLAlchemy 类

python - SQLAlchemy - 按用户名加载用户