在SQLAlchemy中选择Null

|| 我想做相当于
SELECT * FROM 
(SELECT foo, bar FROM baz JOIN quux ON baz.id = quux.id
    UNION
SELECT foo, NULL AS bar FROM baz) 
GROUP BY (foo, bar) HAVING foo = \'John Doe\';
使用sqlalchemy 0.6,但我似乎无法在其中偷偷找到
NULL
。 到目前为止,这大致是我所拥有的:
q1 = session.query(Baz.foo, Quux.bar).join(Quux)
q2 = session.query(Baz.foo, None)
#                           ^^^^ This breaks!
    
已邀请:
另一种选择是将sqlalchemy.text()与select语句一起使用,例如:
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

mymetadata = sa.MetaData()
Base = declarative_base(metadata=mymetadata)
Session = sessionmaker(bind=sa.engine)

session = Session()

class Person(Base):
    __tablename__ = \'some_table\'
    id = sa.Column(sa.Integer, primary_key=True)
    name = sa.Column(sa.String(50))


print sa.select([Person.name, sa.text(\'NULL as null_bar\')])

>>> SELECT some_table.name, NULL as null_bar 
FROM some_table
    
一个更简单的解决方案是使用sqlalchemy.null():
q1 = session.query(Baz.foo, Quux.bar) \\
            .join(Quux.bar)

q2 = session.query(Baz.foo, 
                   sqlalchemy.null().label(\'null_bar\'))

qall = q1.union(q2)
foocol = qall.column_descriptions[0][\'expr\']
qgrp = qall.group_by([col[\'name\'] for col in qall.column_descriptions])
q = qgrp.having(foocol == \'John Doe\')
q.all()
    
我设法解决了。解决方案如下所示:
q1 = session.query(Baz.foo, Quux.bar) \\
            .join(Quux.bar)

q2 = session.query(Baz.foo, 
                   sqlalchemy.sql.expression.literal_column(\'NULL as null_bar\'))

qall = q1.union(q2)
foocol = qall.column_descriptions[0][\'expr\']
qgrp = qall.group_by([col[\'name\'] for col in qall.column_descriptions])
q = qgrp.having(foocol == \'John Doe\')
q.all()
    

要回复问题请先登录注册