orm设置bool型 python_python – 布尔类型列,作为SQLAlchemy中的ClauseElement

本文探讨了在SQLAlchemy ORM中如何使用布尔类型列作为过滤条件,特别是在不同数据库引擎上的适用性。通过示例展示了在0.7及更高版本中,如何在query方法中使用多个过滤条件,以及在0.7之前版本如何使用and_()或表绑定的列来实现相同功能。
摘要由CSDN通过智能技术生成

为什么SQLAlchemy中不可能将布尔类型列用作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()

标签:python,sqlalchemy

来源: https://codeday.me/bug/20190703/1370324.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值