pt12pymsql使用

pymysql是Python连接MySQL数据库的第三方库,支持事务处理。使用流程包括建立连接、创建游标、执行SQL(如插入、更新、删除)、提交或回滚事务、关闭游标和连接。示例中展示了如何进行数据库写操作和读取操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pymysql模块

pymysql是一个第三方库,如果自己的计算机上没有可以在终端使用命令进行安装。
pymysql默认开始事务,支持事务的引擎需要commit

sudo pip3 install pymysql       

pymysql使用流程

1. 建立数据库连接:db = pymysql.connect(...)
2. 创建游标对象:cur = db.cursor()

3. 游标方法:  cur.execute("insert ....")
4. 提交到数据库或者获取数据 :  db.commit() / cur.fetchall()
    
5. 关闭游标对象 :cur.close()
6. 断开数据库连接 :db.close()

常用函数

db = pymysql.connect(参数列表)   功能: 链接数据库

host :主机地址,本地 localhost
port :端口号,默认3306
user :用户名
password :密码
database :库
charset :编码方式,推荐使用 utf8

cur = db.cursor()   功能: 创建游标,返回值:返回游标对象,用于执行具体SQL命令
cur.execute(sql,args_list) 
功能: 执行SQL命令
参数: sql sql语句
      args_list  列表,用于给sql语句传递参量
      
cur.executemany(sql命令,args_list)
功能: 多次执行SQL命令,执行次数由列表中元组数量决定
参数: sql sql语句
      args_list  列表中包含元组 每个元组用于给sql语句传递参量,一般用于写操作。

db.commit() 提交到数据库执行,必须支持事务操作才有效
db.rollback() 回到原来的数据形态,必须支持事务操作才有效
cur.fetchone() 获取查询结果集的第一条数据,查找到返回一个元组否则返回None
cur.fetchmany(n) 获取前n条查找到的记录,返回结果为元组嵌套元组, ((记录1),(记录2)),查询不到内容返回空元组。
cur.fetchall() 获取所有查找到的记录,返回结果形式同上。
cur.close() 关闭游标对象
db.close() 关闭数据库连接
"""
数据库写操作演示
执行写操作会自动开启事务,如果数据表不支持事务则
执行sql语句后立即生效,如果支持事务需要commit
提交或者rollback
"""
import pymysql

kwargs = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "123456",
    "database": "stu",
    "charset": "utf8"
}
# 连接数据库
db = pymysql.connect(**kwargs)

# 生成游标:实际使用sql语句操作数据得到结果的对象
cur = db.cursor()

# 写操作 : insert update delete
# try:
#     sql = "update class set score=%s where id=%s;"
#     cur.execute(sql,[99,2])  # 执行语句
#     sql = "delete from class where name=%s;"
#     cur.execute(sql,["Eva"])  # 执行语句      记得加""
#     db.commit() # 事务提交
# except Exception as e:
#     print(e)
#     db.rollback()

# 批量写操作
data = [
    ("Ben", 17, 'm', 56),
    ("Eva", 18, 'w', 57),
    ("Jame", 17, 'm', 58)
]
try:
    sql = "insert into class (name,age,sex,score) values (%s,%s,%s,%s);"
    cur.executemany(sql, data)  # 批量执行
    db.commit()
except:
    db.rollback()

# 关闭数据库
cur.close()
db.close()

"""
建立一个数据库 dict 使用utf8编码
在该数据库中 创建一个数据表
words : id   word    mean
将dict.txt文件中的单词插入到words数据表
思路: 以什么形式写数据库--》 文件操作组织数据
"""
import pymysql
import re


class Dict:
    def __init__(self):
        self.kwargs = {
            "user": "root",
            "password": "123456",
            "database": "dict",
            "charset": "utf8"
        }
        self.db = pymysql.connect(**self.kwargs)
        self.cur = self.db.cursor()

    def insert_word(self):
        # 任务主体,插入单词
        data = self.get_data()  # 获取数据
        # 写入到数据库
        try:
            sql = "insert into words (word,mean) values (%s,%s);"
            self.cur.executemany(sql, data)  # 批量执行
            self.db.commit()
        except:
            self.db.rollback()

    def get_data(self):
        # 插入单词
        file = open("dict.txt")
        data = []  # 存放单词 [(word,mean),.....]
        for line in file:
            result = re.findall("(\w+)\s+(.*)", line) 
            data += result
        file.close()
        return data

    def close(self):
        # 关闭数据库
        self.cur.close()
        self.db.close()


if __name__ == '__main__':
    dict = Dict()  # 准备工作(连接数据库,创建游标)
    dict.insert_word()  # 干事
    dict.close()
"""
数据库读取操作  select
"""
import pymysql

kwargs = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "123456",
    "database": "stu",
    "charset": "utf8"
}
#  连接数据库
db = pymysql.connect(**kwargs)

#  生成游标:实际使用sql语句操作数据得到结果的对象
cur = db.cursor()

# 数据读取操作  select
sql = "select name,age,score from class where score<%s;"
cur.execute(sql, [80])

# one = cur.fetchone() # 获取一条记录,从游标里取,取一条少一条
# print("One:",one)
#
# many = cur.fetchmany(2) # 获取2条记录
# print("Many:",many)
#
# all = cur.fetchall() # 获取所有记录
# print("All:",all)

# 迭代每次获取一个查询记录
for row in cur:
    print(row)
    
    
# 关闭数据库
cur.close()
db.close()

文件存储

  • 存储文件路径
    • 优点:节省数据库空间,提取方便
    • 缺点:文件或者数据库发生迁移会导致文件丢失
  • 存储文件本身
    • 优点:安全可靠,数据库在文件就在
    • 缺点:占用数据库空间大,文件存取效率低
静态文件存储示例:

"""
存取二进制数据
"""

import pymysql

kwargs = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "123456",
    "database": "stu",
    "charset": "utf8"
}

# 连接数据库
db = pymysql.connect(**kwargs)

# 创建游标  使用sql操作数据得到结果的对象
cur = db.cursor()

# 存储图片
# with open("left.png",'rb') as f:
#     data = f.read()
# sql = "update class set image=%s where id=4;"
# cur.execute(sql,[data])
# db.commit()

# 取出图片
sql = "select image from class where id=4;"
cur.execute(sql)
data = cur.fetchone()[0]
with open("xxx.png",'wb') as f:
    f.write(data)

# 关闭
cur.close()
db.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值