Python用法记录

  1. cursor.execute
python 复制代码
cursor.execute(sql, parameters)
  • sql:字符串类型,要执行的 SQL 语句(如查询、插入、更新等)。
  • parameters(可选):元组或字典,用于传递 SQL 语句中的参数(避免 SQL 注入,推荐使用)。
  1. 执行无参数的 SQL 语句
python和sql 复制代码
# 示例:查询所有图书
cursor.execute("SELECT * FROM books")
# 获取结果
all_books = cursor.fetchall()  # 所有结果
  1. 执行带参数的 SQL 语句(推荐) 使用参数化查询? 占位符)传递动态值,避免直接拼接字符串(防止 SQL 注入和语法错误)。
  • 方式 1:使用 ? 作为占位符(SQLite 推荐)
  • 参数以元组形式传递,顺序与 ? 一一对应。
sql 复制代码
# 示例:查询作者为"鲁迅"**的图书**
author = "鲁迅"
# SQL 中用?代替具体值
cursor.execute("SELECT * FROM books WHERE author = ?", (author,))  # 注意元组的逗号
# 获取结果
books = cursor.fetchall()
  • 方式 2:使用命名占位符(如 :name)
  • 参数以字典形式传递,可读性更好(适合参数较多的场景)。
js 复制代码
# 示例:插入新图书
book_data = {
    "title": "Python编程",
    "author": "张三"
}
cursor.execute('''
    INSERT INTO books (title, author) 
    VALUES (:title, :author)
''', book_data)  # 字典的key与占位符:title、:author对应
conn.commit()  # 提交事务(写操作必需)
  • 方式3. 执行批量操作(executemany)
  • 对多条数据执行相同的 SQL 语句(如批量插入),效率高于多次调用 execute。
js 复制代码
# 示例:批量插入3本图书
books = [
    ("book1", "author1"),
    ("book2", "author2"),
    ("book3", "author3")
]
cursor.executemany(
    "INSERT INTO books (title, author) VALUES (?, ?)",
    books  # 列表中的每个元组对应一条数据
)
conn.commit()

关键注意事项

  1. 写操作需要提交事务: 执行 INSERT/UPDATE/DELETE 等修改数据的操作后,必须调用 conn.commit() 才能将修改保存到数据库。若出错,可调用 conn.rollback() 回滚。

  2. 参数传递格式:

  • 单参数时,元组需加逗号 :(value,)(避免被解析为普通括号)。
  • 字符串参数无需手动加单引号,参数化查询会自动处理。
  • SQL 注入风险: 严禁直接拼接字符串生成 SQL(如 f"SELECT * FROM books WHERE author = '{author}'"),恶意输入(如 author = "'); DROP TABLE books;--)会导致数据泄露或破坏。
  1. 结果获取方法:
  • cursor.fetchone():获取一条结果(查询时用)。
  • cursor.fetchall():获取所有结果(查询时用)。
  • cursor.rowcount:获取受影响的行数(如 UPDATE/DELETE 后)。

完整试例:

Python和Sql 复制代码
import sqlite3

# 连接数据库
conn = sqlite3.connect("test.db")
cursor = conn.cursor()

# 创建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT,
        age INTEGER
    )
''')

# 插入数据(带参数)
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
conn.commit()  # 提交

# 查询数据
cursor.execute("SELECT * FROM users WHERE age > ?", (18,))
print(cursor.fetchall())  # 输出: [(1, 'Alice', 25)]

# 关闭连接
cursor.close()
conn.close()

相关推荐
Rock_yzh1 小时前
AI学习日记——参数的初始化
人工智能·python·深度学习·学习·机器学习
青衫客363 小时前
基于 Python 构建的安全 gRPC 服务——TLS、mTLS 与 Casbin 授权实战
python·安全·微服务
-dzk-3 小时前
【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
运维·服务器·python·计算机视觉·3d·三维重建·三维
摩羯座-185690305945 小时前
爬坑 10 年!京东店铺全量商品接口实战开发:从分页优化、SKU 关联到数据完整性闭环
linux·网络·数据库·windows·爬虫·python
ACERT3335 小时前
5.吴恩达机器学习—神经网络的基本使用
人工智能·python·神经网络·机器学习
韩立学长5 小时前
【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
开发语言·python·数据分析
2401_831501736 小时前
Python学习之day03学习(文件和异常)
开发语言·python·学习
可触的未来,发芽的智生6 小时前
触摸未来2025.10.06:声之密语从生理构造到神经网络的声音智能革命
人工智能·python·神经网络·机器学习·架构
Zwb2997926 小时前
Day 24 - 文件、目录与路径 - Python学习笔记
笔记·python·学习
hui函数6 小时前
python全栈(基础篇)——day03:后端内容(字符串格式化+简单数据类型转换+进制的转换+运算符+实战演示+每日一题)
开发语言·后端·python·全栈