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的官方文档。

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

 

 

你可能感兴趣的:(sql,数据库,python)