gpt4 book ai didi

python - sqlalchemy 表达式 not_

转载 作者:行者123 更新时间:2023-11-30 23:20:59 25 4
gpt4 key购买 nike

我有以下代码:

 s = select([user.c.Title]).where(user.c.Action != 'delete')
conn = engine.connect()
rows = conn.execute(s).fetchall()
print rows
conn.close()

该代码应该获取“Action”列不等于的标题列表'删除'。每次运行代码时,我都会得到一个空列表。echo 设置为 True 时控制台中的输出为:

2014-08-05 16:27:31,492 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2014-08-05 16:27:31,492 INFO sqlalchemy.engine.base.Engine ()
2014-08-05 16:27:31,492 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2014-08-05 16:27:31,492 INFO sqlalchemy.engine.base.Engine ()
2014-08-05 16:27:31,493 INFO sqlalchemy.engine.base.Engine SELECT "Notes"."Title"
FROM "Notes"
WHERE "Notes"."Action" != ?
2014-08-05 16:27:31,493 INFO sqlalchemy.engine.base.Engine ('delete',)
[]

我检查了数据库,发现有些行中没有“删除”“操作”列。

当我使用时:

s = select([user.c.Title]).where(not_(user.c.Action != 'delete'))

我仍然得到相同的输出。

提前致谢!

最佳答案

SQL 中的

NULL 的行为与 Python 中的 None 不同,SQLAlchemy 通常不会改变这一点。 SQL 表达式 NULL != 'delete' 的结果是 NULL,而不是 TRUE。在 WHERE 子句中,NULL 被视为 false。

要将表达式中的 NULL 转换为 TRUEFALSE,您可以使用 IS 表达式。在您的示例中,如果 "Action"'delete' 不同,您希望返回 TRUE,即使它为 null:

("Action" != 'delete') IS NOT FALSE

如果括号内的表达式为FALSE,则整个表达式为FALSE。如果为 TRUENULL,则整个表达式为 TRUE

要在 SQLAlchemy 中创建此表达式,请使用 isnot() :

(user.c.Action != 'delete').isnot(False)

如果我们重写它以删除双重否定,我会更容易理解:

(user.c.Action == 'delete').isnot(True)

它应该生成 SQL:

("Action" = 'delete') IS NOT TRUE

关于python - sqlalchemy 表达式 not_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25140308/

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