首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy -查找小于指定值的最大值

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

Stack Overflow用户
提问于 2019-09-02 22:57:03
回答 1查看 138关注 0票数 0

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

>= 10000的prod_id值是保留的。

因此,当添加一个新产品时,我需要为它分配下一个可用的prod_id,它应该比当前最高的prod_id大1,忽略任何大于9999的值。

我也许可以用SQL构造一些东西,但我正在努力构建一个返回该值的SQLAlchemy查询。

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

模型:

代码语言:javascript
复制
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查询:

代码语言:javascript
复制
next_prod_id = 1 + max(Product.prod_id where Product.prod_id < 10000)

因此,举个例子,如果现有的表是...

代码语言:javascript
复制
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。

下面是我尝试的一个查询,但它不起作用(我无法纠正语法错误):

代码语言:javascript
复制
next_prod_id = Product.query(func.max(Product.prod_id)) \
           .filter_by(Product.prod_id < 10000) + 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 00:23:11

好的,我设法让func.max来做这件事。

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

代码语言:javascript
复制
next_prod_id = db.session.query(db.func.max(Product.prod_id)) \
                .filter(Product.prod_id < 10000) \
                .scalar() + 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57759070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档