为什么在 SQLAlchemy 中不能使用 Boolean 类型的列作为 ClauseElement 本身?
session.query(Table).filter(Table.name == 'huszar', Table.valid)
当然Table.valid == True
可以,但对我来说看起来有点难看......
为什么在 SQLAlchemy 中不能使用 Boolean 类型的列作为 ClauseElement 本身?
session.query(Table).filter(Table.name == 'huszar', Table.valid)
当然Table.valid == True
可以,但对我来说看起来有点难看......
我想也许你在 0.7 并且 ORM 还不支持单个 filter() 调用中的多个条件,这是在 0.8 中添加的,如果独立,0.7 似乎也需要表绑定列。一切都在 0.8 中工作:
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class A(Base):
__tablename__ = "a"
id = Column(Integer, primary_key=True)
data = Column(String(20))
boolean = Column(Boolean)
# works
e = create_engine("sqlite://", echo=True)
# works
#e = create_engine("postgresql://scott:tiger@localhost/test", echo=True)
# works
#e = create_engine("mysql://scott:tiger@localhost/test", echo=True)
Base.metadata.create_all(e)
s = Session(e)
s.add_all([
A(data='a1', boolean=True),
A(data='a2', boolean=False),
A(data='a3', boolean=True),
])
# works
print s.query(A).filter(A.data > 'a1', A.boolean).all()
# works
print s.query(A).filter(A.boolean).all()
# if before 0.8, need to use and_() or table-bound column
# print s.query(A).filter(and_(A.data > 'a1', A.boolean)).all()
# print s.query(A).filter(A.__table__.c.boolean).all()