掌握Python 操作 MySQL 数据库(用python操作数据库)
off999 2024-10-12 06:14 58 浏览 0 评论
本文Python 操作 MySQL 数据库需要是使用到 PyMySQL 驱动
- PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb。
- PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
Python 操作 MySQL 前提是要安装好 MySQL 数据库并能正常连接使用,安装步骤详见下文。
操作流程
- 安装 MySQL 数据库
- pymysql 模块安装与使用
- 获取数据库的连接
- 执行 sql 语句或存储过程
- 关闭数据库连接
安装 MySQL 数据库
注意: 安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足导致无法安装。
一、Linux 上安装 MySQL
1、检测系统是否自带安装 MySQL:
rpm -qa | grep mysql2、如果查看到系统有安装 MySQL,那可以选择进行卸载:
rpm -e mysql… # 普通删除模式
rpm -e --nodeps mysql… # 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除3、安装 MySQL
首先需要先下载 MySQL 安装包,官网下载地址 下载对应版本即可,或直接在网上拉取并安装:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm # 获取安装包
rpm -ivh mysql-community-release-el7-5.noarch.rpm # 安装
yum update
yum install mysql-server 权限设置:
chown mysql:mysql -R /var/lib/mysql初始化 MySQL:
mysqld --initialize启动 MySQL:
systemctl start mysqld查看 MySQL 运行状态:
systemctl status mysqld4、修改默认密码
Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码:
mysqladmin -u root password "new_password";登陆:
mysql -uroot -p'new_password'三、创建数据库
创建数据库:
create database test_db;查看数据库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
5 rows in set (0.00 sec)
mysql> use test_db;
Database changedpymysql 模块安装与数据 CURD
一、安装
PyMySQL 模块使用 pip命令进行安装:
pip3 install PyMySQL假如系统不支持 pip 命令,可以使用以下方式安装:
$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install二、pymysql 连接数据库
pymysql .connect 函数:连接上数据库
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
print(conn)
print(type(conn))输出结果显示如下:表面数据库连接成功
<pymysql.connections.Connection object at 0x00000000022A54A8>
<class 'pymysql.connections.Connection'>使用 pymysql 的 connect() 方法连接数据库,connect 参数解释如下:
- host:MySQL服务的地址,若数据库在本地上,使用 localhost 或者127.0.0.1。如果在其它的服务器上,则写对应的 IP地址
- port:服务的端口号,默认为3306,不写则为默认值。
- user:登录数据库的用户名
- passwd:登录 MySQL 的密码
- db:数据库名
- charset:设置为 utf8 编码,解决存汉字乱码问题
conn.cursor():获取游标
如果要操作数据库,光连接数据是不够的,咱们必须拿到操作数据库的游标,才能进行后续的操作,游标的主要作用是用来接收数据库操作后的返回结果,比如读取数据、添加数据。通过获取到的数据库连接实例 conn 下的 cursor() 方法来创建游标,实例如下:
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
print(cursor_test)输出结果为:
<pymysql.cursors.Cursor object at 0x000000000A544B00>cursor 返回一个游标实例对象,其中包含了很多操作数据的方法,如执行sql语句,sql 执行命令:execute()和executemany()
execute(query,args=None):
- 函数作用:执行单条的sql语句,执行成功后返回受影响的行数
- 参数说明:query:要执行的sql语句,字符串类型args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符
executemany(query,args=None):
- 函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数
- 参数说明:query:要执行的sql语句,字符串类型args:嵌套的序列或映射,用于query的参数值
其他游标对象如下表:
名称 | 描述 |
close() | 关闭游标,之后游标不可用 |
fetchone() | 返回一条查询结果 |
fetchall() | 返回所有查询结果 |
fetchmany([size]) | 返回size条查询结果 |
nextset() | 移动到下一条结果 |
scroll(value,mode=’relative’) | 移动游标到指定行,如果mode=’relative’,则表示从当前行移动value条,如果mode=‘absolute’,则表示从结果集的第一行移动value条 |
完整数据库连接操作实例如下:
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
print(cursor_test)
# 使用 execute() 方法执行 SQL 查询,查询数据库版本
cursor_test.execute("SELECT VERSION()")
# 使用 fetchone() 方法返回一条数据.
data = cursor_test.fetchone()
print("Database version : %s " % data)
# 关闭数据库连接
conn.close()以上结果输出为:
Database version : 5.7.28 三、创建表
创建表代码如下:
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor_test.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE user1 (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor_test.execute(sql)
# 关闭数据库连接
conn.close()如下所示数据库表创建成功:
mysql> desc user1;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| FIRST_NAME | char(20) | NO | | NULL | |
| LAST_NAME | char(20) | YES | | NULL | |
| AGE | int(11) | YES | | NULL | |
| SEX | char(1) | YES | | NULL | |
| INCOME | float | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)三、插入数据
插入数据实现代码:
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
# 使用预处理语句创建表
sql = """INSERT INTO user1(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Fei', 'Fei', 20, 'M', 1000)"""
try:
# 执行sql语句
cursor_test.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 如果发生错误则回滚
conn.rollback()
# 关闭数据库连接
conn.close()插入数据结果:
mysql> select * from user1;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Fei | Fei | 20 | M | 1000 |
+------------+-----------+------+------+--------+
1 row in set (0.00 sec)四、查询数据
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
- fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
- fetchall(): 接收全部的返回结果行.
- rowcount: 这是一个只读属性,并返回执行 execute()方法后影响的行数。
查询数据代码如下:
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
sql = """
select * from user1"""
try:
# 执行 sql 语句
cursor_test.execute(sql)
# 显示出所有数据
data_result = cursor_test.fetchall()
for row in data_result:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income))
except:
print("Error: unable to fetch data")
# 关闭数据库连接
conn.close()输出结果:
fname=Fei,lname=Fei,age=20,sex=M,income=1000.0五、数据库表更新操作
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
sql = "UPDATE user1 SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# 执行SQL语句
cursor_test.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 发生错误时回滚
conn.rollback()
# 关闭数据库连接
conn.close()六、删除操作
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
sql = "DELETE * FROM user1"
try:
# 执行SQL语句
cursor_test.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 发生错误时回滚
conn.rollback()
# 关闭数据库连接
conn.close()七、错误处理
DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:
异 常 | 描 述 |
Warning | 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。 |
Error | 警告以外所有其他错误类。必须是 StandardError 的子类。 |
InterfaceError | 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。 |
DatabaseError | 和数据库有关的错误发生时触发。 必须是Error的子类。 |
DataError | 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。 |
OperationalError | 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。 |
IntegrityError | 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。 |
InternalError | 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。 |
ProgrammingError | 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。 |
NotSupportedError | 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。 |
总结
本文给大家介绍 Python 如何连接 Mysql 进行数据的增删改查操作,文章通过简洁的代码方式进行示例演示,给使用 Python 操作 Mysql 的工程师提供支撑。
相关推荐
- 腾达路由器手机端登录入口(腾达路由器手机端登录入口在哪)
-
腾达路由器使用192.168.0.1或tendawifi.com作为登录地址。登录管理员页面的步骤:1、手机连接到腾达路由器的wifi信号;2、在手机上打开浏览器,在地址栏输入192.168.0.1后...
-
- 百度网盘app下载安装手机版(百度网盘app安卓版)
-
百度网盘没有关闭离线下载功能,可以通过以下方法进行离线下载:1、打开手机,找到手机中的百度网盘:2、打开百度网盘,找到右下角的“我的”,找到屏幕中的“离线下载”:3、点击打开离线下载,选择“新建链接任务”,然后点击“确定”:4、在新建链接页...
-
2025-12-21 03:51 off999
- 安卓虚拟机破解版(挽念虚拟机15.0破解版)
-
正盗版都是广联达公司内部出来的,破解の用来打市场,正版的用来获取利润,个人破不了1、确保你的虚拟机网路设置正确。2、如果采用的是独立无线网卡那么要确保独立网卡能被虚拟机识别,虚拟机安装了独立无线网卡...
- win7系统改中文(win7系统换中文)
-
要将Windows7系统从英文切换为中文,可以按照以下步骤进行:1.打开控制面板:点击Windows开始菜单,选择“控制面板”。2.打开区域和语言设置:在控制面板中,找到“时钟、语言和区域”或“...
- win10启动盘怎么制作(windows10如何制作启动盘)
-
要制作Win10PE启动盘,首先需要下载Win10PE镜像文件。然后,使用专业的制作工具(如Rufus或WinToUSB)将镜像文件写入U盘或DVD。接下来,将U盘或DVD插入需要启动的计算机,并在B...
- 磁盘分区win7(磁盘分区win r)
-
1操作分区比较简单,但需要严格按照步骤进行,否则可能会导致数据丢失或无法启动等问题。2首先要进入磁盘管理界面,找到新安装的硬盘,右键选择“新建简单卷”,按照步骤设置分区大小、驱动器号、文件系统等。...
- cad2007破解版安装序列号(cad破解版的序列号)
-
1安装过程中可能会出现一些常见错误。例如,安装程序无法启动、安装程序突然中止或无法完成、安装后无法启动CAD等。2这些错误的原因可能是由于系统环境不符合要求,或者是由于安装程序本身出现问题。3为...
- windows7旗舰版安装密钥(win7安装密钥和激活密钥)
-
一、在线获取激活密钥1、访问官方网站:打开浏览器,访问微软官方网站。2、注册账号:如果没有微软账号,需要先注册一个账号。3、登录账号:使用注册的账号登录微软官方网站。4、获取密钥:在官方网站上找到wi...
- vmware下载哪个版本(vmware各版本下载)
-
vmos能运行原神。VMOS(虚拟大师)是一款以VirtualMachine(简称VM,即虚拟机)技术为主的APP(安卓应用软件)。通过VM技术,把开源的安卓系统(支持任意版本),无需root,以普...
- 在哪下载win7系统比较可靠(去哪下载win7)
-
靠谱,系统之家的系统装好后不需要激活,也不要钱。只是系统之家的所有东西,系统也好,软件也好。都有强有力的写在系统底层的顽固病毒,只要碰过系统之家就永远杀不干净。当然了,永远关不掉的广告弹窗也是基本操作...
- 一般家庭宽带用多少兆为最佳
-
这个要根据实际情况来确定,一般情况下,家庭宽带有50兆、100兆及200兆。如果是三口之家,平时也就看看电视,或刷刷手机,50兆的就够了。如果人口多,面积为四室二厅的房子,同时有人看电视有人玩游戏,有...
- 电脑配置太高装不了win7(电脑配置太高装不了win7怎么办)
-
如果是这样,那就不要安装Win7了,安装Win10即可。原因如下:1、win10系统是一个大势所趋。新的事物,你必须要接触、要熟悉,虽然目前还可以暂时回避,但是几年后呢,win7必然会像xp一样退出历...
- 移动硬盘读取不出来(移动硬盘读取不出来了,怎么拿数据)
-
1、移动硬盘插入电脑,选择计算机,选择左侧“此电脑”,点击右击。2、选择“管理”点击,进入计算机管理;选择磁盘“磁盘管理”。3、如没有看到移动硬盘,可以选择右边的更多操作,重新扫描磁盘。4、如依然没有...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
