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()

相关推荐
Pocker_Spades_A几秒前
Python快速入门专业版(五十七)——POST请求与模拟登录:从表单分析到实战(以测试网站为例)
开发语言·python
Highcharts.js4 分钟前
企业级数据可视化|BI 仪表板数据中台工业监控平台的选择分析
人工智能·python·信息可视化·数据挖掘·数据分析·highcharts
橙露9 分钟前
Seaborn 高级可视化:统计图表制作与报告导出
python
2601_9544345510 分钟前
2026年专业深度测评:入门电钢琴品牌排名前五权威发布
大数据·人工智能·python
道清茗14 分钟前
【RH294知识点汇总】第 3 章 《 管理变量和事实 》1
开发语言·python
shy^-^cky17 分钟前
Python OpenCV 边缘检测效果对比
python·opencv·计算机视觉·边缘检测·sobel·canny·roberts
老歌老听老掉牙22 分钟前
从芯厚误差到几何约束:一个核心误差函数的深度重构与解析
python
阿Y加油吧24 分钟前
栈的经典应用:从「有效括号」到「寻找两个正序数组的中位数」深度解析
开发语言·python·算法
独隅25 分钟前
PyTorch 文本生成完整代码模板与深度解析
人工智能·pytorch·python
阿_旭29 分钟前
基于YOLO26深度学习的骑行安全检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·骑行安全检测