用于筛选sqlalchemy查询的库。

sqlalchemy-filters的Python项目详细描述


过滤

假设我们有一个sqlalchemy 查询 对象:

fromsqlalchemyimportColumn,Integer,Stringfromsqlalchemy.ext.declarativeimportdeclarative_baseclassBase(object):id=Column(Integer,primary_key=True)name=Column(String(50),nullable=False)count=Column(Integer,nullable=True)Base=declarative_base(cls=Base)classFoo(Base):__tablename__='foo'# ...query=session.query(Foo)

然后我们可以对查询对象(多次)应用过滤器:

fromsqlalchemy_filtersimportapply_filters# `query` should be a SQLAlchemy query objectfilter_spec=[{'field':'name','op':'==','value':'name_1'}]filtered_query=apply_filters(query,filter_spec)more_filters=[{'field':'foo_id','op':'is_not_null'}]filtered_query=apply_filters(filtered_query,more_filters)result=filtered_query.all()

也可以过滤包含多个模型的查询, 包括连接:

classBar(Base):__tablename__='bar'foo_id=Column(Integer,ForeignKey('foo.id'))
query=session.query(Foo).join(Bar)filter_spec=[{'model':'Foo',field': 'name', 'op': '==', 'value': 'name_1'},{'model':'Bar',field': 'count', 'op': '>=', 'value': 5},]filtered_query=apply_filters(query,filter_spec)result=filtered_query.all()

应用过滤器 将尝试自动将模型连接到查询 如果它们不存在并且提供了特定于型号的筛选器。 例如,下面两个代码中的 filtered_query的值 块是相同的:

query=session.query(Foo).join(Bar)# join pre-applied to queryfilter_spec=[{'model':'Foo',field': 'name', 'op': '==', 'value': 'name_1'},{'model':'Bar',field': 'count', 'op': '>=', 'value': 5},]filtered_query=apply_filters(query,filter_spec)
query=session.query(Foo)# join to Bar will be automatically appliedfilter_spec=[{field': 'name', 'op': '==', 'value': 'name_1'},{'model':'Bar',field': 'count', 'op': '>=', 'value': 5},]filtered_query=apply_filters(query,filter_spec)

只有在sqlalchemy可以隐式地 确定联接的条件,例如 关键关系。

自动连接允许客户端灵活地筛选和排序 不指定服务器上所有可能的联接的相关对象 事先。

注意,第二个块的第一个过滤器没有指定模型。 它隐式地应用于 foo 模型,因为这是 传递到 应用过滤器的原始查询中的模型

也可以将过滤器应用于由字段或 功能:

query_alt_1=session.query(Foo.id,Foo.name)query_alt_2=session.query(func.count(Foo.id))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish