我有一个包含产品列表的SQLAlchemy模型。除了主键之外,还为每个产品分配了一个连续的数字产品标识符(prod_id)。
>= 10000的prod_id值是保留的。
因此,当添加一个新产品时,我需要为它分配下一个可用的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发布于 2019-09-04 00:23:11
好的,我设法让func.max来做这件事。
这是我的解决方案--不确定它是否是最有效的,但它是有效的。
next_prod_id = db.session.query(db.func.max(Product.prod_id)) \
.filter(Product.prod_id < 10000) \
.scalar() + 1https://stackoverflow.com/questions/57759070
复制相似问题