技术笔记:python连接mysql数据库

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 技术笔记:python连接mysql数据库

  连接mysql方式很多,这里先只介绍pymysql库连接mysql数据库。


1.安装pymysql


pip install pymysql -i


2. 建立mysql数据表


  安装好mysql数据库之后,建立表并插入数据后如下:


  表的结构:


3. 连接数据库


  连接数据库使用pymysql库的connections模块中的Connection类。所以得调用Connection(参数)得到Connection对象。


  方法1:


import pymysql


arg_kwargs={


'host':"localhost",


'port':3306,


'user':'root',


'password':"123456",


'database':"db01",


'charset':'utf8'


}


db=pymysql.connections.Connection(arg_kwargs)#pymysql.connections.Connection对象


print(db.dict)#{'_local_infile': False, 'ssl': False,//代码效果参考:http://hnjlyzjd.com/hw/wz_24713.html

'host': 'localhost', 'port': 3306, 'user': b'root',.............

  方法2:


  如果不想使用方法1中的字典,可以直接给构造函数赋值,本质一样:


import pymysql


db=pymysql.connect(


host="localhost",


port=3306,


user='root',


password="123456",


database="db01",


charset='utf8'


)


4. Connection类详解


  Connection类位于connections模块中,再看下面这个情况,发现以下这四种方法都可以:


db=pymysql.connections.Connection(arg_kwargs)#1


# db=pymysql.Connection(arg_kwargs)#2


# db=pymysql.Connect(arg_kwargs)#3


# db=pymysql.connect(arg_kwargs)#4


  为什么呢?原因如下:


  经过深入看代码,发现在pymysql库中的init.py文件中的第135行定义了Connect = connect = Connection = connections.Connection(看下图所示)。


而使用import pymysql时,先执行了init.py,所以以上四种相同。网上用的pymysql.connect(参数)较多,因为简单。


  Connection构造函数又39个参数,这里只介绍常用的几个参数:


参数


传入类型


参数说明


host


str


MySQL服务器地址


port


int


MySQL服务器端口号


user


str


用户名


password


str


密码


database


str


数据库名称


charset


str


字符编码


collation


str


字符串校对规则


5. //代码效果参考:http://hnjlyzjd.com/hw/wz_24711.html

查询操作

import pymysql


arg_kwargs={


'host':"localhost",


'port':3306,


'user':'root',


'password':"123456",


'database':"db01",


'charset':'utf8'


}


#1.连接数据库,并得到Connection对象


db=pymysql.connections.Connection(arg_kwargs)


#2.创建数据库的游标


cur=db.cursor()


#3.sql语句


sql="select bname,press,author from book;"


#4.执行sql语句(其实是将sql语句提交给mysql数据库执行,执行后返回结果)


try:


cur.execute(sql)#是一个可迭代对象,返回一个int类型,为Number of affected rows.


except Exception as e:


print(e)


#查询不需要rollback,因为select不需要commit


else:


print("sql执行成功")


finally:


cur.close()#先关闭cur


db.close()#再关闭db


  如果需要获取一条数据或多条数据,可以使用下面的方法:


# 分别获取一条记录数据、多条记录、所有记录


one=cur.fetchone()


many=cur.fetchmany(2)


all=cur.fetchall()


  如果需要给sql语句传入参数,可以如下:


sql2="select bname,press,author from book where price>%s;"#用%s


cur.execute(sql2,【100】)#第二个参数为占位符传值,为列表,列表里的第一个元素对应第一个%s,如果有多过个%s,一一对应


6. 插入操作


  写操作,最后需要使用commit提交事务。


import pymysql


#1.连接数据库


db=pymysql.connect(


host="localhost",


port=3306,


user='root',


password="123456",


database="db01",


charset='utf8'


)


data=【('数学','张三','机械出版社',78,"2023-06-04","数学书"),('英语','李四','机械出版社',67,"2023-07-04","英语书"),('活着','余华','人民出版社',46,"2023-06-01","富贵的一生")】


#2.创建数据库的游标


cur=db.cursor()


#3.sql语句


sql="insert into book(bname,author,press,price,presstime,comment) values" \


"(%s,%s,%s,%s,%s,%s);"


#4.提交数据库


#写操作,需要使用commit提交到数据库


try:


cur.executemany(sql, data)


  #或者使用下面代码


# for i in range(len(data)):


# cur.execute(sql,data【i】)


except Exception as e:


print(e)


db.rollback()#如果提交的sql执行错误,事务回滚


else:


#提交到数据库


db.commit()#事务提交,提交后,数据持久化到硬盘中,事务开启是默认开启的


finally:


# 5.关闭


cur.close()


db.close()


  注意 cur.executemany(sql, data)一次性写入多条记录,cur.execute(sql,data【i】)一次写入一条记录。


7. 修改操作


import pymysql


arg_kwargs={


'host':"localhost",


'port':3306,


'user':'root',


'password':"123456",


'database':"db01",


'charset':'utf8'


}


db=pymysql.connections.Connection(arg_kwargs)#拆包,将字典拆成host="localhost" ......


#创建数据库的游标


cur=db.cursor()


try:


update_sql="update book set price=%s where bname=%s;"


cur.execute(update_sql, 【300,'二十年后'】) # 第二个参数为占位符传值


except Exception as e:


print(e)


db.rollback()


else:


#提交到数据库


db.commit()#事务提交,事务开启是默认开启的


finally:


# 5.关闭


cur.close()


db.close()


8. cur.executemany(参数)与cur.execute(参数)区别


  看个例子(参考网上例子):


# coding:utf-8


import time


import pymysql


"""


1、每条数据都进行execute和commit


2、多次执行exectue,最后commit


3、使用executemany执行1次,然后commit1次


"""


arg_kwargs={


'host':"localhost",


'port':3306,


'user':'root',


'password':"123456",


'database':"db01",


'charset':'utf8'


}


con=pymysql.connections.Connection(**arg_kwargs)


#创建数据库的游标


cur=con.cursor()


sql = 'insert into test_table(num) values(%s);'


# 1、执行和提交10000次


def test1(i):


t1 = time.time()


for i in range(i):


try:


cur.execute(sql,【i】)


con.commit()


except Exception as e:


print(e)


con.rollback()


t2 = time.time()


print('使用10000次execute和commit耗时:%.2f秒'%(t2-t1))


# 2、执行10000次,提交1次


def test2(i):


t1 = time.time()


</

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
3月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
4月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
791 19
|
4月前
|
关系型数据库 MySQL 索引
MySQL多表练习笔记
链接可行,多表查询语法
132 0
|
5月前
|
数据采集 机器学习/深度学习 数据可视化
Python量化交易:结合爬虫与TA-Lib技术指标分析
Python量化交易:结合爬虫与TA-Lib技术指标分析
|
6月前
|
数据采集 自然语言处理 分布式计算
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
|
6月前
|
JavaScript Java Go
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
441 0
|
4月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
181 3
|
4月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
4月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
869 152

推荐镜像

更多