특정 열에서 NULL이 아닌 값을 선택하기 위해 SQL에서와 같이 필터를 추가하려면 어떻게해야합니까?
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
SQLAlchemy 필터로 어떻게 똑같이 할 수 있습니까?
select = select(table).select_from(table).where(all_filters)
특정 열에서 NULL이 아닌 값을 선택하기 위해 SQL에서와 같이 필터를 추가하려면 어떻게해야합니까?
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
SQLAlchemy 필터로 어떻게 똑같이 할 수 있습니까?
select = select(table).select_from(table).where(all_filters)
답변:
column_obj != None
IS NOT NULL
제약 조건 을 생성합니다 .
열 컨텍스트에서 절을 생성합니다
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'
is
사용자 지정 클래스에 의해 오버로드 될 수 없기 때문 !=
입니다.
0.7.9 버전부터는 다음 .isnot
과 같이 제약 조건을 비교하는 대신 필터 연산자 를 사용할 수 있습니다 .
query.filter(User.name.isnot(None))
이 방법은 pep8이 우려되는 경우에만 필요합니다.
출처 : sqlalchemy 문서
NULL
의 RHS만큼 유효하지 않고 더 나은 !=
사용으로 isnot
생성 된 명령문의 모양에 대한 의도를 전달하기 때문에 이것이 더 나은 솔루션이라고 생각합니다 .
!= NULL
사용하더라도 내 보내지 않습니다 column != None
. 당신은 얻는다 IS NOT NULL
. 그러나을 사용 .isnot()
하면 다른 유형에 강제로 적용 할 수 있습니다 IS NOT
( .isnot(True)
예 : 부울 열에 대해 생각해보십시오 ).
다른 사람이 궁금한 경우 다음 is_
을 생성 하는 데 사용할 수 있습니다 foo IS NULL
.
>>> sqlalchemy.sql 가져 오기 열에서 >>> print column ( 'foo'). is_ (None) foo는 NULL입니다. >>> print column ( 'foo'). isnot (None) foo는 NULL이 아닙니다.
all_filters
? 왜select_from
?