如何在SQL中添加筛选器以从特定列中选择不为NULL的值?sqlalchemy IS NOT NULL请选择
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
我该怎么做SQLAlchemy过滤器?
select = select(table).select_from(table).where(all_filters)
如何在SQL中添加筛选器以从特定列中选择不为NULL的值?sqlalchemy IS NOT NULL请选择
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
我该怎么做SQLAlchemy过滤器?
select = select(table).select_from(table).where(all_filters)
column_obj != None
会产生IS NOT NULL
constraint:
在一列范围内,产生该条
a != b
。如果目标是None
,则生成IS NOT NULL
。
或使用isnot()
(在0.7.9新):
落实
IS NOT
操作。通常,
IS NOT
是在与None
的值相比较时自动生成的,其值为NULL
。但是,如果与某些平台上的布尔值进行比较,则可能需要明确使用IS NOT
。
演示:
>>> from sqlalchemy.sql import column
>>> column('YourColumn') != None
<sqlalchemy.sql.elements.BinaryExpression object at 0x10c8d8b90>
>>> str(column('YourColumn') != None)
'"YourColumn" IS NOT NULL'
>>> column('YourColumn').isnot(None)
<sqlalchemy.sql.elements.BinaryExpression object at 0x104603850>
>>> str(column('YourColumn').isnot(None))
'"YourColumn" IS NOT NULL'
“不是”是否产生相同的输出? – Breezer
@Breezer:不,因为'is'不能通过自定义类以'!='的方式重载。 –
另一个答案是现在的首选答案;它也避免了包括PyCharm在内的许多IDE产生警告。 –
版本开始0.7.9可以使用滤波器算.isnot
,而不是比较紧张,像这样:
query.filter(User.name.isnot(None))
这种方法只需要如果pep8是一个问题。
除了让pep8开心以外,我认为这是一个更好的解决方案,因为'NULL'在SQL中'!='的RHS并非有效,并且使用'isnot'可以更好地表达您希望生成的语句看起来像什么样的意图。 – Josh
@Josh:即使您在Python端使用'column!= None',SQLAlchemy也不会发出'!= NULL';你会得到'不是NULL'。例如,使用'.isnot()'可以让你*在其他类型上强制*'不是'(想想'.isnot(True)')。 –
如果任何人想知道,您可以使用is_
生成foo IS NULL
:
>>> from sqlalchemy.sql import column >>> print column('foo').is_(None) foo IS NULL >>> print column('foo').isnot(None) foo IS NOT NULL
什么是'这里all_filters'?为什么'select_from'? –
你有一个表定义还是你需要使用列文字? –