ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python 与数据库交互的 15 个 SQL 查询技巧 [打印本页]

作者: 前进之路    时间: 2024-11-22 20:37
标题: Python 与数据库交互的 15 个 SQL 查询技巧
当你刚开始学习 Python 与数据库交互时,可能会以为有点不知所所措。但别担心,通过本文,你将学会如何利用 Python 进行基本的 SQL 查询,并掌握一些高级技巧。让我们一步步来,从简单的查询到更复杂的利用。
创作不易,还请各位同学三连点赞!!收藏!!转发!!!

     ⭐刚入门学习Python的小伙伴可以试试我的这份学习方法和籽料,免费自取!!-----《籽料点这里》
  1. 连接到数据库

首先,你需要连接到数据库。这里以 SQLite 为例,由于它是轻量级且易于上手的。
  1. import sqlite3
  2. # 连接到 SQLite 数据库(如果不存在则会创建)
  3. conn = sqlite3.connect('example.db')
  4. # 创建一个游标对象
  5. cursor = conn.cursor()
复制代码
2. 创建表

在开始查询之前,我们需要一个表。假设我们要创建一个存储用户信息的表。
  1. # 创建表
  2. cursor.execute('''
  3. CREATE TABLE IF NOT EXISTS users (
  4.     id INTEGER PRIMARY KEY,
  5.     name TEXT NOT NULL,
  6.     age INTEGER NOT NULL,
  7.     email TEXT UNIQUE NOT NULL
  8. )
  9. ''')
复制代码
3. 插入数据

接下来,我们可以向表中插入一些数据。
  1. # 插入数据
  2. cursor.execute('''
  3. INSERT INTO users (name, age, email) VALUES (?, ?, ?)
  4. ''', ('Alice', 30, 'alice@example.com'))
  5. cursor.execute('''
  6. INSERT INTO users (name, age, email) VALUES (?, ?, ?)
  7. ''', ('Bob', 25, 'bob@example.com'))
  8. # 提交事务
  9. conn.commit()
复制代码
4. 查询全部记录

如今,让我们查询表中的全部记录。
  1. # 查询所有记录
  2. cursor.execute('SELECT * FROM users')
  3. rows = cursor.fetchall()
  4. for row in rows:
  5.     print(row)
复制代码
5. 查询特定记录

你可以通过条件来查询特定的记录。
  1. # 查询特定记录
  2. cursor.execute('SELECT * FROM users WHERE age > 25')
  3. rows = cursor.fetchall()
  4. for row in rows:
  5.     print(row)
复制代码
6. 利用参数化查询

为了避免 SQL 注入攻击,发起利用参数化查询。
  1. # 参数化查询
  2. age_threshold = 25
  3. cursor.execute('SELECT * FROM users WHERE age > ?', (age_threshold,))
  4. rows = cursor.fetchall()
  5. for row in rows:
  6.     print(row)
复制代码
7. 更新记录

你可以更新表中的记录。
  1. # 更新记录
  2. cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))
  3. conn.commit()
复制代码
8. 删除记录

你也可以删除表中的记录。
  1. # 删除记录
  2. cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))
  3. conn.commit()
复制代码
9. 利用 JOIN 查询

如果你有多个表,可以利用 JOIN 来查询相关数据。
  1. # 假设有一个 orders 表
  2. cursor.execute('''
  3. CREATE TABLE IF NOT EXISTS orders (
  4.     id INTEGER PRIMARY KEY,
  5.     user_id INTEGER,
  6.     product TEXT,
  7.     FOREIGN KEY (user_id) REFERENCES users (id)
  8. )
  9. ''')
  10. # 插入订单数据
  11. cursor.execute('INSERT INTO orders (user_id, product) VALUES (?, ?)', (1, 'Laptop'))
  12. conn.commit()
  13. # 使用 JOIN 查询
  14. cursor.execute('''
  15. SELECT users.name, orders.product 
  16. FROM users 
  17. JOIN orders ON users.id = orders.user_id
  18. ''')
  19. rows = cursor.fetchall()
  20. for row in rows:
  21.     print(row)
复制代码
10. 利用聚合函数

聚合函数可以帮助你处理和汇总数据。
  1. # 使用聚合函数
  2. cursor.execute('SELECT COUNT(*) FROM users')
  3. count = cursor.fetchone()[0]
  4. print(f'Total number of users: {count}')
复制代码
11. 分组和排序

你可以利用 GROUP BY 和 ORDER BY 来分组和排序数据。
  1. # 分组和排序
  2. cursor.execute('''
  3. SELECT age, COUNT(*) 
  4. FROM users 
  5. GROUP BY age 
  6. ORDER BY age DESC
  7. ''')
  8. rows = cursor.fetchall()
  9. for row in rows:
  10.     print(row)
复制代码
12. 利用子查询

子查询可以在查询中嵌套另一个查询。
  1. # 使用子查询
  2. cursor.execute('''
  3. SELECT * 
  4. FROM users 
  5. WHERE id IN (SELECT user_id FROM orders)
  6. ''')
  7. rows = cursor.fetchall()
  8. for row in rows:
  9.     print(row)
复制代码
13. 利用事务管理

事务管理可以帮助你确保数据的同等性和完备性。
  1. # 事务管理
  2. try:
  3.     cursor.execute('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', ('Charlie', 28, 'charlie@example.com'))
  4.     cursor.execute('INSERT INTO orders (user_id, product) VALUES (?, ?)', (3, 'Phone'))
  5.     conn.commit()
  6. except Exception as e:
  7.     conn.rollback()
  8.     print(f'Error: {e}')
复制代码
14. 利用上下文管理器

上下文管理器可以自动管理资源,如关闭数据库连接。
  1. # 使用上下文管理器
  2. with sqlite3.connect('example.db') as conn:
  3.     cursor = conn.cursor()
  4.     cursor.execute('SELECT * FROM users')
  5.     rows = cursor.fetchall()
  6.     for row in rows:
  7.         print(row)
复制代码
15. 利用 ORM 框架

对于更复杂的项目,可以考虑利用 ORM 框架,如 SQLAlchemy。
  1. from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
  2. from sqlalchemy.ext.declarative import declarative_base
  3. from sqlalchemy.orm import sessionmaker, relationship
  4. Base = declarative_base()
  5. class User(Base):
  6.     __tablename__ = 'users'
  7.     id = Column(Integer, primary_key=True)
  8.     name = Column(String, nullable=False)
  9.     age = Column(Integer, nullable=False)
  10.     email = Column(String, unique=True, nullable=False)
  11. class Order(Base):
  12.     __tablename__ = 'orders'
  13.     id = Column(Integer, primary_key=True)
  14.     user_id = Column(Integer, ForeignKey('users.id'))
  15.     product = Column(String, nullable=False)
  16.     user = relationship("User")
  17. # 创建数据库引擎
  18. engine = create_engine('sqlite:///example.db')
  19. # 创建表
  20. Base.metadata.create_all(engine)
  21. # 创建会话
  22. Session = sessionmaker(bind=engine)
  23. session = Session()
  24. # 插入数据
  25. new_user = User(name='David', age=27, email='david@example.com')
  26. session.add(new_user)
  27. session.commit()
  28. # 查询数据
  29. users = session.query(User).all()
  30. for user in users:
  31.     print(user.name, user.age, user.email)
复制代码
实战案例:用户管理系统

假设你要开发一个简单的用户管理系统,需要实现以下功能:
1. 添加用户:答应管理员添加新用户。2. 查询用户:答应管理员按条件查询用户。3. 更新用户信息:答应管理员更新用户的年岁和邮箱。4. 删除用户:答应管理员删除用户。
  1. def add_user(name, age, email):
  2.     with sqlite3.connect('example.db') as conn:
  3.         cursor = conn.cursor()
  4.         cursor.execute('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', (name, age, email))
  5.         conn.commit()
  6. def query_users(age_threshold):
  7.     with sqlite3.connect('example.db') as conn:
  8.         cursor = conn.cursor()
  9.         cursor.execute('SELECT * FROM users WHERE age > ?', (age_threshold,))
  10.         rows = cursor.fetchall()
  11.         return rows
  12. def update_user(user_id, new_age, new_email):
  13.     with sqlite3.connect('example.db') as conn:
  14.         cursor = conn.cursor()
  15.         cursor.execute('UPDATE users SET age = ?, email = ? WHERE id = ?', (new_age, new_email, user_id))
  16.         conn.commit()
  17. def delete_user(user_id):
  18.     with sqlite3.connect('example.db') as conn:
  19.         cursor = conn.cursor()
  20.         cursor.execute('DELETE FROM users WHERE id = ?', (user_id,))
  21.         conn.commit()
  22. # 示例操作
  23. add_user('Eve', 32, 'eve@example.com')
  24. print(query_users(30))
  25. update_user(1, 33, 'alice_new@example.com')
  26. delete_user(2)
复制代码
总结

通过本文,你学会了如何利用 Python 进行基本的 SQL 查询,包括连接数据库、创建表、插入数据、查询记录、更新和删除记录等。此外,你还了解了如何利用参数化查询、JOIN 查询、聚合函数、分组和排序、子查询、事务管理和 ORM 框架。末了,我们通过一个实战案例展示了如何将这些知识应用于现实项目中。希望这些内容对你有所帮助!

资源分享 

读者福利:对Python感兴趣的童鞋,为此我专门给各人准备好了Python全套的学习资料
​​​​​
Python全部方向的学习门路

Python全部方向门路就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,包管本身学得较为全面。
​​​​​​
视频教程

大信息时代,传统媒体远不如视频教程那么生动生动,一份零基础到精通的全流程视频教程分享给各人
​​​​​​
实战项目案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才华将本身的所学运用到现实当中去,这时间可以搞点实战案例来学习。
​​​​​​
​​​​​​
副业兼职门路

​​​​​​


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4