Python使用pymysql连接Mysql数据库操作笔记:连接、游标与 execute、executemany——含手动管理与 with 自动管理两种写法

conn.commit():提交事务,使修改操作永久生效

cursor.close():关闭游标,释放游标资源(推荐但不强制)

conn.close():关闭连接,释放数据库连接资源(必须)

cursor.execute():执行单条SQL语句,适用于一次操作一条记录。

cursor.executemany():批量执行同一条SQL语句,适用于一次操作多条记录。

1、查询语句的话 cursor.execute和 cursor.executemany没有区别

2、cursor.fetchone()表示返回查询结果中的1行,cursor.fetchmany(3)表示返回查询结果中的3行,cursor.fetchall()表示返回所有查询结果

传统方式(需要手动管理,即需要conn.commit()和cursor.close()和conn.close()):

python 复制代码
import pymysql
conn = None
cursor = None
try:
    # 1. 建立连接
    conn = pymysql.connect(host='localhost', user='root', password='PassWord', database='test')
    
    # 2. 创建游标
    cursor = conn.cursor()
    
    # 3. 执行查询
    cursor.execute("SELECT * FROM users WHERE age > %s", (20,))
    results = cursor.fetchall()
    
    # 4. 执行修改(需要提交)
    cursor.execute("UPDATE users SET status = 'active' WHERE age > %s", (20,))
    
    # 5. 提交事务
    conn.commit()
    
except Exception as e:
    # 6. 出错时回滚
    if conn:
        conn.rollback()
    print(f"错误: {e}")
    
finally:
    # 7. 关闭游标(如果存在)
    if cursor:
        cursor.close()
    
    # 8. 关闭连接(如果存在)
    if conn:
        conn.close()

使用with语句(自动管理):

备注:用with Connection(...)的则需要先from pymysql import Connection,实际上with pymysql.connect(...) 和 with Connection(...) 等价,因为 connect() 返回的就是 Connection 对象

python 复制代码
import pymysql

try:
    # 使用with自动管理连接和游标
    with pymysql.connect(host='localhost', user='root', password='PassWord', database='test') as conn:
        with conn.cursor() as cursor:
            # 执行查询
            cursor.execute("SELECT * FROM users")
            results = cursor.fetchall()
            
            # 执行修改
            cursor.execute("UPDATE users SET last_login = NOW()")
            
        # 连接上下文结束时自动提交(如果没出错)或回滚(如果出错)
        
except Exception as e:
    print(f"错误: {e}")

cursor.executemany()示例

python 复制代码
import pymysql

conn = pymysql.connect(host='localhost', user='root', password='PassWord',database='db1')
cursor = conn.cursor()

# 批量插入多条记录
users_data = [
    ('Bob', 30, 'bob@example.com'),
    ('Charlie', 35, 'charlie@example.com'),
    ('David', 28, 'david@example.com')
]

cursor.executemany(
    "INSERT INTO table1 (name, age, email) VALUES (%s, %s, %s)",
    users_data
)
#table1是空表,插入了3条记录

# 批量更新多条记录
update_data = [
    (26, 'Alice'),
    (31, 'Bob'),
    (36, 'Charlie')
]

cursor.executemany(
    "UPDATE table1 SET age = %s WHERE name = %s",
    update_data
)
#update语句中只更新了31, 'Bob'和36, 'Charlie'这两行,没有更新26, 'Alice'是因为name='Alice'的行不存在
conn.commit()

cursor.execute()示例

python 复制代码
import pymysql

conn = pymysql.connect(host='localhost', user='root', password='PassWord',database='db1')
cursor = conn.cursor()


# 插入单条记录
cursor.execute(
    "INSERT INTO table1 (name, age, email) VALUES (%s, %s, %s)",
    ('Alice', 25, 'alice@example.com')
)

# 查询单条记录
cursor.execute("SELECT * FROM table1 WHERE age = %s", (25,))
result = cursor.fetchone()
print(result)

# 更新单条记录
cursor.execute(
    "UPDATE table1 SET age = %s WHERE name = %s",
    (26, 'Alice')
)

conn.commit()

备注:以上insert和update中cursor.execute改成cursor.executemany都会报错TypeError: not enough arguments for format string,但是SELECT中cursor.execute改成cursor.executemany没有问题

相关推荐
迷途呀1 小时前
强化学习概念
人工智能·深度学习·机器学习·强化学习·1024程序员节
技术小甜甜1 小时前
【Cursor】Skill 被标黄色警告,怎么改成合格的 SKILL.md
开发语言·javascript·ai编程·cursor·1024程序员节·ai agent·skills
syounger1 小时前
SAP季度营收首次突破100亿欧元:云增长强劲,AI贡献仍需进一步量化
1024程序员节
qz_Serene1 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节
Wanda12141 小时前
机器人与机电一体化3D数字孪生机器-Day6
unity·机器人·数字孪生·1024程序员节
山顶夕景1 小时前
【VideoLLM】Agentic Video Understanding视频理解综述
agent·强化学习·1024程序员节·视频理解·agentic·多模态理解·grpo
可乐_不渴1 小时前
【Linux】 项目自动化构建工具makefile&& 版本管理Git&&第一个程序
linux·git·自动化·1024程序员节
爱喝雪碧的可乐1 小时前
OpenAI Codex完成率
大数据·人工智能·1024程序员节
要开心吖ZSH1 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout