SQLAlchemy - 查找小于指定值的最大值



我有一个SQLAlchemy模型,其中包含一个产品列表。除了主键之外,还为每个产品分配了一个连续的数字产品标识符 (prod_id(。

保留prod_id值>= 10000。

因此,当添加新产品时,我需要将其分配给下一个可用prod_id,该应比最高电流prod_id大 1,忽略任何> 9999。

我可能可以在SQL中构造一些东西,但我正在努力形成一个将返回该值的SQLAlchemy查询。

我不担心竞争条件 - 这是一个简化的示例来说明问题。

模型:

class Product(db.Model):
__tablename__ = 'products'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
prod_id = db.Column(db.Integer)

其中prod_id是连续的商品标识码(保留了 prod_ids>=10000(。

在伪代码中,我正在寻找一个等效于以下内容的 SQLAlchemy 查询:

next_prod_id = 1 + max(Product.prod_id where Product.prod_id < 10000)

因此,例如,如果现有表是...

id    name        prod_id
1    Product A         1
2    Product B         2
3    Reserved A    10000
4    Product C         3
5    Reserved B    10001
6    Product D         4

。那么next_prod_id需要是 5。

这是我对查询的刺痛,但它不起作用(我无法整理的语法错误(:

next_prod_id = Product.query(func.max(Product.prod_id)) 
.filter_by(Product.prod_id < 10000) + 1

好的,设法获得func.max来完成这项工作。

这是我的解决方案 - 不确定它是否是最有效的,但它有效。

next_prod_id = db.session.query(db.func.max(Product.prod_id)) 
.filter(Product.prod_id < 10000) 
.scalar() + 1

最新更新