gpt4 book ai didi

python - 在 sqlalchemy 的 having 子句中使用标签

转载 作者:行者123 更新时间:2023-11-29 05:17:45 26 4
gpt4 key购买 nike

我正在尝试在 sqlalchemy 的 having 子句中使用标签,但我在让它工作时遇到了问题。我正在尝试这样的事情:

qry = db.session.query(
Foo.id,
Foo.name,
(Foo.max_stuff - func.sum(Bar.stuff)).label('rstuff')
).join(Bar) \
.group_by(Foo.id) \
.having('rstuff' >= "some_data_passed_in_by_customer")

for res in qry.all():
print res

但是得到错误:

sqlalchemy.exc.ArgumentError: having() argument must be of type sqlalchemy.sql.ClauseElement or string

如果我尝试将 having 语句更改为:

.having('rstuff >= "some_data_passed_in_by_customer"')

然后它似乎工作正常,但我猜这会导致 sql 注入(inject)漏洞。我可以通过原始 sql 来做到这一点,但如果可以的话,我想避免这种情况。有什么想法吗?

最佳答案

尝试以下两个版本中的任何一个(但不确定第二个版本是否适用于 MySQL):

rstuff = (Foo.max_stuff - db.func.sum(Bar.stuff))
qry = (
db.session.query(
Foo.id,
Foo.name,
rstuff.label('rstuff')
)
.join(Bar)
.group_by(Foo.id)

# version-1: probably universal, but repeats the expression
.having(rstuff >= 3)
# version-2: might depend on the RMDBS engine
# .having(db.literal_column('rstuff') >= 3)
)

关于python - 在 sqlalchemy 的 having 子句中使用标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30313872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com