使用Python连接MySQL数据库

1.环境说明

Python版本:3.11.7

pymysql版本:1.0.2

MySQL数据库版本:5.7.38(64位版本)

数据库连接工具:HeidiSQL(版本号:12.12.0.7122)

数据库名称:DB_test

2.连接数据库

(1)构造连接参数

使用db_config记录连接参数。

db_config为字典格式,其中每个元素的键(key)表示参数名称,值(value)表示对应参数设置的值。

python 复制代码
db_config = {
    "host": "localhost",  # 服务器地址
    "port": 3306,  # 端口
    "user": "root",  # 用户名
    "password": "12345678",  # 密码
    "db": "DB_test",  # 数据库名称
    "charset": "utf8mb4"  # 字符集
    }

(2)连接数据库

使用pymysql.connect函数连接数据库:

python 复制代码
conn = pymysql.connect(**db_config)

其中**db_config表示对db_config进行拆包,将字典拆为关键字参数。

(3)判断连接是否成功

使用conn.open判断连接状态。

python 复制代码
if conn.open:
    print("数据库连接成功")
else:
    print("数据库连接失败")

(4)关闭数据库连接

python 复制代码
conn.close()

(5)完整代码

python 复制代码
import pymysql

db_config = {
    "host": "localhost",  # 服务器地址
    "port": 3306,  # 端口
    "user": "root",  # 用户名
    "password": "1qaz2wsx",  # 密码
    "db": "DB_test",  # 数据库名称
    "charset": "utf8mb4"  # 字符集
    }

try:
    # 连接数据库
    conn = pymysql.connect(**db_config)

    #判断是否连接成功
    if conn.open:
        print("数据库连接成功")
    else:
        print("数据库连接失败")
    
    # 关闭数据库
    conn.close()

except Exception as e:
    # 抛出异常
    print("错误", f"连接失败:{str(e)}")

3.读取数据

(1)数据说明

数据表stu如下图所示,共有4个字段(stuid、stuname、sturemark、stunumber),每个字段的值均为varchar格式。表中共有6条数据。

(2)读取数据

使用conn.cursor()方法创建游标cursor;

向该游标传入要执行的SQL语句(sql)并执行,此时将查询数据的请求保存在游标cursor中;

使用cursor.fetchall()方法查询数据并全部读出,保存在data中。

最后将data中的数据逐条显示。

python 复制代码
conn = pymysql.connect(**db_config)  # 连接数据库

sql = "SELECT stuid, stuname, sturemark, stunumber FROM stu"  # 查询数据所使用的SQL语句
cursor = conn.cursor()  # 创建游标
cursor.execute(sql)  # 查询数据
data = cursor.fetchall()  # 获取所有结果

for row_idx, (stuid, stuname, sturemark, stunumber) in enumerate(data):
    print(f"序号:{stuid},姓名:{stuname},备注:{sturemark},号码:{stunumber}")

cursor.close()  # 关闭游标
conn.close()  # 关闭数据库连接

这里的data为二重元组格式,元组中的每个元素也为一个元组,记录数据表中的一条数据。

data中不包含表头字段信息。

python 复制代码
data = (('0001', '霍华德', '魔术', '12'), ('0002', '詹姆斯', '骑士', '23'), ...)

最终显示的输出结果为:

python 复制代码
序号:0001,姓名:霍华德,备注:魔术,号码:12
序号:0002,姓名:詹姆斯,备注:骑士,号码:23
序号:0003,姓名:姚明,备注:火箭,号码:11
序号:0004,姓名:易建联,备注:雄鹿,号码:9
序号:0005,姓名:科比,备注:湖人,号码:24
序号:0006,姓名:杜兰特,备注:雷霆,号码:35

(3)逐条读取数据

当数据量较大的时候,为了节省内存占用,可以使用cursor.fetchone()方法,每次只读取表中的一条数据,当返回None时表示读取完毕。

则上述程序更改如下:

python 复制代码
conn = pymysql.connect(**db_config)  # 连接数据库
sql = "SELECT stuid, stuname, sturemark, stunumber FROM stu"  # 查询数据所使用的SQL语句
cursor = conn.cursor()  # 创建游标
cursor.execute(sql)  # 查询数据

while True:
    row = cursor.fetchone()  # 每次读取一条数据
    if row is None:
        break  # 读取完毕,退出循环
    stuid, stuname, sturemark, stunumber = row  # 将该条数据中各字段的值赋值给对应变量
    print(f"序号:{stuid}, 姓名:{stuname}, 备注:{sturemark}, 号码:{stunumber}")

cursor.close()  # 关闭游标
conn.close()  # 关闭数据库连接

最终输出结果与之前一次读取所有数据的输出结果一致:

bash 复制代码
序号:0001, 姓名:霍华德, 备注:魔术, 号码:12
序号:0002, 姓名:詹姆斯, 备注:骑士, 号码:23
序号:0003, 姓名:姚明, 备注:火箭, 号码:11
序号:0004, 姓名:易建联, 备注:雄鹿, 号码:9
序号:0005, 姓名:科比, 备注:湖人, 号码:24
序号:0006, 姓名:杜兰特, 备注:雷霆, 号码:35

4.完整代码

(1)一次读取所有数据

python 复制代码
import pymysql

db_config = {
    "host": "localhost",  # 服务器地址
    "port": 3306,  # 端口
    "user": "root",  # 用户名
    "password": "1qaz2wsx",  # 密码
    "db": "DB_test",  # 数据库名称
    "charset": "utf8mb4"  # 字符集
    }

try:
    conn = pymysql.connect(**db_config)  # 连接数据库
    sql = "SELECT stuid, stuname, sturemark, stunumber FROM stu"  # 查询数据所使用的SQL语句
    cursor = conn.cursor()  # 创建游标
    cursor.execute(sql)  # 查询数据
    data = cursor.fetchall()  # 获取所有结果
    for row_idx, (stuid, stuname, sturemark, stunumber) in enumerate(data):
        print(f"序号:{stuid},姓名:{stuname},备注:{sturemark},号码:{stunumber}")
    cursor.close()  # 关闭游标
    conn.close()  # 关闭数据库连接

except Exception as e:
    print("错误", f"连接失败:{str(e)}")

(2)逐条读取数据

python 复制代码
import pymysql

db_config = {
    "host": "localhost",  # 服务器地址
    "port": 3306,  # 端口
    "user": "root",  # 用户名
    "password": "1qaz2wsx",  # 密码
    "db": "DB_test",  # 数据库名称
    "charset": "utf8mb4"  # 字符集
    }

try:
    conn = pymysql.connect(**db_config)  # 连接数据库
    sql = "SELECT stuid, stuname, sturemark, stunumber FROM stu"  # 查询数据所使用的SQL语句
    cursor = conn.cursor()  # 创建游标
    cursor.execute(sql)  # 查询数据

    while True:
        row = cursor.fetchone()  # 每次读取一条数据
        if row is None:
            break  # 读取完毕,退出循环
        stuid, stuname, sturemark, stunumber = row  # 将该条数据中各字段的值赋值给对应变量
        print(f"序号:{stuid}, 姓名:{stuname}, 备注:{sturemark}, 号码:{stunumber}")

    cursor.close()  # 关闭游标
    conn.close()  # 关闭数据库连接

except Exception as e:
    print("错误", f"连接失败:{str(e)}")
相关推荐
测试19982 小时前
自动化测试:selenium详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
悲伤小伞2 小时前
0-MySQL 在 Centos 7环境详细安装过程
linux·服务器·数据库·mysql·centos
Oscar的参数2 小时前
datagrip连接未预置数据库保姆级教程--以dm数据库为例
大数据·数据库·database
进击的小头2 小时前
第5篇:最优控制问题的组成
python·算法
hhzz2 小时前
JupyterLab、Jupyter Notebook 和 Voilà 的安装与使用指南
ide·python·jupyter
这辈子谁会真的心疼你2 小时前
修改视频拍摄时间会被发现吗?修改视频拍摄时间的方法
python·音视频
九尾狐ai2 小时前
从青鸟文化案例看校园文化建设的技术架构与实现方案
开发语言·python
zhangfeng11332 小时前
unsloth 安装在google colab
pytorch·python·深度学习
海边的Kurisu2 小时前
范进说八股 | Redis篇
数据库·redis·缓存