如何在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'? –
你有一個表定義還是你需要使用列文字? –