2011-03-23 40 views
0

下面的代碼是特定的DB:有沒有數據庫獨立的方式與SQLAlchemy查詢過濾「無」/「NaN」?

import sqlalchemy 
# ... 
ergebnis = session.query(
    my_object.attr1).filter(sa.and_(
     my_object.attr2 != 'NaN')).all() # PostgreSQL 
     """ 
     my_object.attr2 != None)).all() # sQLite 
     """ 

在PostgreSQL它是 「 '的NaN'」,使用SQLite 「無」(不單引號)。是否有一種SQLAlchemy方式來獨立完成後端?

+0

''NaN''只是PostgreSQL中的純字符串文字,並沒有「特殊」的含義(至少不是普通的SQL - 不知道SQLAlchemy是否對此有所幫助)。什麼樣的數據類型是'attr2'?我的猜測是你想檢查NULL(但沒有引號) – 2011-03-23 07:09:02

+0

attr2是浮動的。問題似乎是,如果PostgreSQL返回NULL,則SQLAlchemy提供「NaN」字符串,如果SQLite返回NULL,則返回None。就這樣,PostgreSQL或SQLite如何返回NULL(如字符串或NoneType)應該由SQLAlchemy處理,而不是傳遞給用戶。 – 2011-04-07 05:15:33

回答

1

如果你想比較反對'NaN'(「非數字」)浮動值,然後做一個明確的投浮動:float('NaN')。在這種情況下,SQLAlchemy 應該做相同的轉換。

+1

float('NaN')不適用於SQLite。 – 2011-04-07 05:16:14