写在前面
如何简单快速的编写 SQL 查询在 Python 开发中是非常重要的。而 Pypika 是一个强大而用户友好的操作 SQL 的 Python 扩展包,它可以更轻松地创建易于理解的 SQL 查询。在这篇文章中,我们将介绍 Pypika 的基础知识,探讨一些典型的用例,并使用具体的示例评估其功能。
!!! 请注意
Pypika 仅仅用于构建 SQL 语句,不能用于连接、操作数据库。如果需要操作数据库请选择 Pymysql 等类似扩展工具
Pypika简介
Pypika 是一个设计用于动态生成 SQL 查询的 Python 库。它的主要目标是简化构建复杂查询的过程,同时保持可读性。它提供了流畅的 API,允许用户以 Pythonic 的方式使用方法链的语法创建 SQL 查询。
安装
首先,使用 pip 安装 Pypika :
pip install pypika
构建基本查询
我们从一个简单的示例开始,展示如何使用 Pypika 创建基本的 SQL 查询:
-
查询表中的所有数据:
from pypika import Query, Table
query = Query.from_('users').select('*')
print(query.get_sql())
# 输出
>> SELECT * FROM "users";
-
查询指定行数据:
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"
-
插入数据记录
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)
-
更新查询
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'
-
删除查询
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
-
子查询
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
-
函数和别名
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"
-
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"
-
排序和输出条数
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
-
联合查询
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的官方文档。
原文始发于微信公众号(harvey的网络日志):Pypika:让Python轻松构建SQL查询
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐
暂无评论内容