2011-03-23 43 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