Python轻松构建SQL查询

如何简单快速的编写 SQL 查询在 Python 开发中是非常重要的。而 Pypika 是一个强大而用户友好的操作 SQL 的 Python 扩展包,它可以更轻松地创建易于理解的 SQL 查询。在这篇文章中,我们将介绍 Pypika 的基础知识,探讨一些典型的用例,并使用具体的示例评估其功能。

!!! 请注意
Pypika 仅仅用于构建 SQL 语句,不能用于连接、操作数据库。如果需要操作数据库请选择 Pymysql 等类似扩展工具

Pypika简介

Pypika 是一个设计用于动态生成 SQL 查询的 Python 库。它的主要目标是简化构建复杂查询的过程,同时保持可读性。它提供了流畅的 API,允许用户以 Pythonic 的方式使用方法链的语法创建 SQL 查询。

安装

首先,使用 pip 安装 Pypika :

pip install pypika

构建基本查询

我们从一个简单的示例开始,展示如何使用 Pypika 创建基本的 SQL 查询:

  1. 查询表中的所有数据:

    from pypika import Query, Table
    
    query = Query.from_('users').select('*')
    print(query.get_sql())
    
    # 输出
    >> SELECT * FROM "users";

  2. 查询指定行数据:

    from pypika import Query, Table
    
    query = Query.from_('users').select('id', 'name', 'age', 'salary')
    
    # 输出
    print(query.get_sql())
    
    >> SELECT "id","name","age","salary" FROM "users"

  3. 更新查询

    from pypika import Query, Table
    
    # 定义一个表
    users = Table( 'users' ) 
    
    # 构造一个 INSERT 查询
    query = Query.into(users).columns( 'name' , 'age' , 'salary' ).insert( ' Alice' , 30 , 10000 ) 
    
    # 输出生成的查询
    print (query.get_sql()) 
    
    >> INSERT INTO "users" ("name","age","salary") VALUES ('Alice',30,10000)

  4. 更新查询

    from pypika import Query, Table
    
    # 定义一个表
    users = Table( 'users' ) 
    
    # 构造一个 UPDATE 查询
    query = Query.update(users). set (users.age, 32 ).where(users.name == 'Alice' ) 
    
    # 输出生成的查询
    print (query.get_sql()) 
    
    >> UPDATE "users" SET "age"=32 WHERE "name"='Alice'

  5. 删除查询

    from pypika import Query, Table
    
    # Define a table
    users = Table('users')
    
    # Construct a DELETE query
    query = Query.from_(users).where(users.age < 30).delete()
    
    # Output the generated query
    print(query.get_sql())
    
    >> DELETE FROM "users" WHERE "age"<30

  6. 子查询

    from pypika import Query, Table
    
    # 定义表
    orders = Table('orders') 
    customers = Table('customers') 
    
    # 构造子查询 subquery
     = Query.from_(orders).select('SUM(amount)').where( order.customer_id ==customers.id ) #
    
    # 使用子查询的主查询
    query = Query.from_(customers).select(customers.name, subquery).where(subquery > 1000 ) 
    
    # 输出生成的查询
    print (query.get_sql( )) 
    
    >> SELECT "name",(SELECT "orders"."SUM(amount)" FROM "orders" WHERE "orders"."customer_id"="customers"."id") FROM "customers" WHERE (SELECT "orders"."SUM(amount)" FROM "orders" WHERE "orders"."customer_id"="customers"."id")>1000

  7. 函数和别名

    from pypika import Query, Table, functions as fn
    
    # 定义表
    products = Table('products') 
    
    # 使用函数和别名构造查询 query
     = Query.from_(products).select(fn.Count('*').as_ ('total_products')) 
    
    # 输出生成的查询
    print (query.get_sql())
    
    >> SELECT COUNT(*) "total_products" FROM "products"

  8. Case 查询

    from pypika import Query, Table, Case
    
    # 定义一个表
    Students = Table( 'students' ) 
    
    # 使用 CASE 语句构造查询 query
    query = Query.from_(students).select(
        students.name,
        Case()
        .when(students.score > 90, 'A')
        .when(students.score > 80, 'B')
        .else_('C').as_('grade'))
    
    print(query.get_sql())
    
    >> SELECT "name",CASE WHEN "score">90 THEN 'A' WHEN "score">80 THEN 'B' ELSE 'C' END "grade" FROM "students"

  9. 排序和输出条数

    from pypika import Query, Table
    
    # 定义一个表
    products = Table( 'products' ) 
    
    # 构造一个带排序和限制的查询 query
     = Query.from_(products).select( 'name' , 'price' ).orderby( 'price ' ).limit( 10 ) 
    
    # 输出生成的查询
    print(query.get_sql())
    
    
    >> SELECT "name","price" FROM "products" ORDER BY "price" LIMIT 10

  10. 联合查询

    from pypika import Query, Table
    
    # 定义表
    table1 = Table( 'table1' ) 
    table2 = Table( 'table2' ) 
    
    # 使用 UNION 构造查询 query
     = Query.from_(table1).select( '*' ).union(Query .from_(table2).select( '*' )) 
    
    # 输出生成的查询
    print(query.get_sql())
    
    >> (SELECT * FROM "table1") UNION (SELECT * FROM "table2")

    结论

    以上,我们介绍了 pypika 如何生成各类 SQL 查询语句,当然,你如过需了解更高级的查询,请查阅Pypika的官方文档。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力! 

 

 

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人帝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值