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

相关推荐
傲笑风5 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
维基框架5 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
Doraemomo6 小时前
SQLite数据库
数据库·sqlite
谢白羽9 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
迷迭香yy9 小时前
基金档案数据工程实战从收入分析到持仓穿透的Python解析 IG50免费开源股票数据API接口
开发语言·python
清水白石00810 小时前
Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践
java·python·json
️学习的小王10 小时前
Git项目提交忽略文件怎么做?以Python项目为例,详解.gitignore
git·python·elasticsearch
前端 贾公子10 小时前
第09章:上下文与记忆 (6)
开发语言·前端·python
evans在进步10 小时前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
jayson.h11 小时前
PDF 合并+添加页码 相关库、类、函数
开发语言·前端·python