查询构造器

介绍

这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用。

查询select操作

查询表中所有的数据。

users = db.table(‘users‘).get()

for user in users:

print(user[‘name‘])

分片查询表中的数据

for users in db.table(‘users‘).chunk(100):

for user in users:

# ...

查询表中的某一条数据

user = db.table(‘users‘).where(‘name‘, ‘John‘).first()

print(user[‘name‘])

查询某一行的某一列数据

user = db.table(‘users‘).where(‘name‘, ‘John‘).pluck(‘name‘)

查询某一列的数据

roles = db.table(‘roles‘).lists(‘title‘)

这个方法返回一个list,如果在加一个参数将返回一个字典。

roles = db.table(‘roles‘).lists(‘title‘, ‘name‘)

指定一个selcet语句

users = db.table(‘users‘).select(‘name‘, ‘email‘).get()

users = db.table(‘users‘).distinct().get()

users = db.table(‘users‘).select(‘name as user_name‘).get()

添加一个select语句在额外查询语句里。

query = db.table(‘users‘).select(‘name‘)

users = query.add_select(‘age‘).get()

使用where操作

users = db.table(‘users‘).where(‘age‘, ‘>‘, 25).get()

使用or操作

users = db.table(‘users‘).where(‘age‘, ‘>‘, 25).or_where(‘name‘, ‘John‘).get()

使用where between操作

users = db.table(‘users‘).where_between(‘age‘, [25, 35]).get()

使用where not between操作

users = db.table(‘users‘).where_not_between(‘age‘, [25, 35]).get()

使用where in操作

users = db.table(‘users‘).where_in(‘id‘, [1, 2, 3]).get()

users = db.table(‘users‘).where_not_in(‘id‘, [1, 2, 3]).get()

使用where null查询Null记录

users = db.table(‘users‘).where_null(‘updated_at‘).get()

使用order by, group by and having操作

query = db.table(‘users‘).order_by(‘name‘, ‘desc‘)

query = query.group_by(‘count‘)

query = query.having(‘count‘, ‘>‘, 100)

users = query.get()

使用offset and limit操作

users = db.table(‘users‘).skip(10).take(5).get()

users = db.table(‘users‘).offset(10).limit(5).get()

使用Join操作

在查询构造器中也可以使用join连表查询。

基本join操作

db.table(‘users‘) .join(‘contacts‘, ‘users.id‘, ‘=‘, ‘contacts.user_id‘) .join(‘orders‘, ‘users.id‘, ‘=‘, ‘orders.user_id‘) .select(‘users.id‘, ‘contacts.phone‘, ‘orders.price‘) .get()

左连接操作left join

db.table(‘users‘).left_join(‘posts‘, ‘users.id‘, ‘=‘, ‘posts.user_id‘).get()

可以使用更高级的连表用法

clause = JoinClause(‘contacts‘).on(‘users.id‘, ‘=‘, ‘contacts.user_id‘).or_on(...)

db.table(‘users‘).join(clause).get()

还可以加入where等条件

clause = JoinClause(‘contacts‘).on(‘users.id‘, ‘=‘, ‘contacts.user_id‘).where(‘contacts.user_id‘, ‘>‘, 5)

db.table(‘users‘).join(clause).get()

where高级用法

有时候我们需要一些where更高级的用法,这些我们在orator中得以实现。

参数分组

db.table(‘users‘) .where(‘name‘, ‘=‘, ‘John‘) .or_where(

db.query().where(‘votes‘, ‘>‘, 100).where(‘title‘, ‘!=‘, ‘admin‘)

).get()

这个查询的sql将是这样。

SELECT * FROM users WHERE name = ‘John‘ OR (votes > 100 AND title != ‘Admin‘)

存在查询

db.table(‘users‘).where_exists(

db.table(‘orders‘).select(db.raw(1)).where_raw(‘order.user_id = users.id‘)

)

这个查询的sql将是这样。

SELECT * FROM users

WHERE EXISTS (

SELECT 1 FROM orders WHERE orders.user_id = users.id

)

聚合查询

这个查询构造器提供了聚合查询。例如:count, max, min, avg, sum。

users = db.table(‘users‘).count()

price = db.table(‘orders‘).max(‘price‘)

price = db.table(‘orders‘).min(‘price‘)

price = db.table(‘orders‘).avg(‘price‘)

total = db.table(‘users‘).sum(‘votes‘)

原生表达式

有时候我们会用到原生表达式,但是要小心sql注入。我们可以使用raw方法,创建一个原生表达式。

db.table(‘users‘) .select(db.raw(‘count(*) as user_count, status‘)) .where(‘status‘, ‘!=‘, 1) .group_by(‘status‘) .get()

插入数据insert

往表中插入数据。

db.table(‘users‘).insert(email=‘foo@bar.com‘, votes=0)

db.table(‘users‘).insert({

‘email‘: ‘foo@bar.com‘,

‘votes‘: 0

})

插入一条记录,并获取自增id。

db.table(‘users‘).insert([

{‘email‘: ‘foo@bar.com‘, ‘votes‘: 0},

{‘email‘: ‘bar@baz.com‘, ‘votes‘: 0}

])

更新数据update

更新表中数据。

db.table(‘users‘).where(‘id‘, 1).update(votes=1)

db.table(‘users‘).where(‘id‘, 1).update({‘votes‘: 1})

增加或减少某一列的值。

db.table(‘users‘).increment(‘votes‘) # Increment the value by 1

db.table(‘users‘).increment(‘votes‘, 5) # Increment the value by 5

db.table(‘users‘).decrement(‘votes‘) # Decrement the value by 1

db.table(‘users‘).decrement(‘votes‘, 5) # Decrement the value by 5

指定增加某一行记录的值。

db.table(‘users‘).increment(‘votes‘, 1, name=‘John‘)

删除数据delete

删除数据。

db.table(‘users‘).where(‘age‘, ‘

删除所有的数据。

db.table(‘users‘).delete()

清空表数据

db.table(‘users‘).truncate()

合并unions

这个查询构造器提供了合并两个查询的方法。

first = db.table(‘users‘).where_null(‘first_name‘)

users = db.table(‘users‘).where_null(‘last_name‘).union(first).get()

注:使用union_all也可以。

悲观锁

这个查询构造器有一些方法,来帮助在查询中我们实现悲观共享锁。

db.table(‘users‘).where(‘votes‘, ‘>‘, 100).shared_lock().get()

db.table(‘users‘).where(‘votes‘, ‘>‘, 100).lock_for_update().get()

python构造器_Python短小精悍的Orator查询构造器相关推荐

  1. python动态生成数据库表_Python版的数据库查询构造器、ORM及动态迁移数据表。

    Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orat ...

  2. python 报价_python基础教程_查询价格

    少儿编程和数学是有这一定联系的,若是将编程弄好了,数学成绩也就会有所提高,今天就为大家来介绍一下一个关于数学的相关编程,现在我们就来看看吧! 题目描述 编程实现以下功能:查询水果的单价.有4种水果,苹 ...

  3. 【JEECG技术文档】JEECG高级查询构造器使用说明

    功能介绍   高级查询构造器支持主子表联合查询,查询出更精确的数据. 要使用高级查询构造器需要完成以下步骤: 1. 在高级查询管理配置主子表信息. 2. 配置完后在JSP页面DataGrid标签上添加 ...

  4. 写一个“特殊”的查询构造器 - (四、条件查询:复杂条件)

    复杂的条件 在 SQL 的条件查询中,不只有 where.or where 这些基本的子句,还有 where in.where exists.where between 等复杂一些的子句.而且即使是 ...

  5. 【laravel5.4】查询构造器对象与模型instance的互相换换

    1.查询构造器一般情况下返回对象,但是无法直接使用model类的一些方法,如toJson.toArray等 DB::table 结果转换成 model 类实例[collect 实例] public f ...

  6. 数据库构造器之查询构造器构建

    近来使用笔者研发的框架中,有一处功能颇为棘手. 由于框架内部监控功能中,需存储当前操作用户主键功能. 然,获取用户主键的模块中,需根据"loginToken"获取"账号主 ...

  7. Laravel Database——查询构造器与语法编译器源码分析 (上)

    前言 在前两个文章中,我们分析了数据库的连接启动与数据库底层 CRUD 的原理,底层数据库服务支持原生 sql 的运行.本文以 mysql 为例,向大家讲述支持 Fluent 的查询构造器 query ...

  8. laravel数据库: 查询构造器

    数据库: 查询构造器 获取结果 从表中检索所有行 get use Illuminate\Support\Facades\DB;$users = DB::table('users')->get() ...

  9. Mybatis-plus条件查询构造器

    Mybatis-plus条件查询构造器 一.wapper介绍 二.AbstractWrapper 1.ge.gt.le.lt.isNull.isNotNull 2.eq.ne 3.between.no ...

最新文章

  1. 兰州市职称计算机考试地点,兰州2013年职称计算机考试报名等事项的通知
  2. UVa197 - Cube(TLE)
  3. 今天写了个Win32服务设置软件,呵呵,纯绿色软件
  4. cygwin 字符显示
  5. ABCDE类IP地址的解释
  6. python 命名空间报错_python命名空间与作用域
  7. Repeater删除时给出js提示
  8. 创建variant二维数组
  9. springboot实现数据库数据导出到Excel中并下载到浏览器本地
  10. Javascript封装
  11. Java学习——Servlet是什么
  12. iOS GPUImage 自定义美颜滤镜
  13. 大数据/人工智能实验室建设优势
  14. 网络狂飙(netspeeder) v3.80 简体中文版 下载
  15. 微软输入法怎么打开软键盘?
  16. 计算机程序运行消耗的内存,电脑内存多大合适?运行内存占用率高的秘密
  17. 两阶段市场投标策略。 电力市场程序。 日前日内竞价 提出了日前电力市场和实时电力市场下充电站的投标策略
  18. 【总结】最系统化的CV内容,有三AI所有免费与付费的计算机视觉课程汇总(2022年12月)...
  19. 基金A类和C类的科普贴
  20. CG原画绘画教程之人物-张聪-专题视频课程

热门文章

  1. Jetbrains IntelliJ IDEA Ultimate 最终版——初始化配置
  2. 数学--数学分类及相关网站和软件
  3. Python100个爬虫教程
  4. 如何推动电信 计算机和信息服务贸易,信息通信技术推动国际贸易变革 我国数字贸易规模扩大...
  5. NLP-D47-nlp比赛D16-读论文D8主动学习算法
  6. 使用phpqrcode生成带logo二维码 并生成海报
  7. 医学图像体渲染照明3 体照明前传之GPU体渲染1
  8. 跨平台Web Canvas渲染引擎架构的设计与思考
  9. 赤峰php,赤峰php程序员培训,赤峰php程序员培训中心,赤峰php程序员培训哪家比较好...
  10. 腾讯视频积分兑换会员怎么用