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

SQLAlchemy-查找小于指定值的最高值,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,我有一个SQLAlchemy模型,其中包含一个产品列表。除了主键之外,每个产品都分配了一个顺序数字产品标识符(prod_id) 保留大于等于10000的产品id值 因此,当添加新产品时,我需要为其分配下一个可用的产品id,该id应比当前最高的产品id大1,忽略任何>9999 我可能可以在SQL中构造一些东西,但我正在努力形成一个将返回该值的SQLAlchemy查询 我不担心比赛条件-这是一个简单的例子来说明问题 模型: 类产品(db.Model): __tablename_uu=‘产品’ id=

我有一个SQLAlchemy模型,其中包含一个产品列表。除了主键之外,每个产品都分配了一个顺序数字产品标识符(prod_id)

保留大于等于10000的产品id值

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

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

我不担心比赛条件-这是一个简单的例子来说明问题

模型:

类产品(db.Model):
__tablename_uu=‘产品’
id=db.Column(db.Integer,主键=True)
name=db.Column(db.String(64))
prod_id=db.Column(db.Integer)
其中,prod_id是顺序产品标识符(prod_id>=10000保留)

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

next_prod_id=1+max(Product.prod_id,其中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
。。。然后下一个产品id需要是5

下面是我对查询的尝试,但它不起作用(语法错误我无法解决):

next\u prod\u id=Product.query(func.max(Product.prod\u 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

这可能会对您有所帮助:我想我需要使用func.max,但语法有问题(我编辑了问题以添加我的尝试)。初始化变量以按产品ID降序排序,筛选产品ID<1000,并使用限制(1)应用于变量。然后插入变量+1