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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 技术笔记: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()


</

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
关系型数据库 数据库 RDS
【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】(5.30-6.8)
本周精选聚焦数据库迁移训练营、快速连接云数据库RDS训练营及智能多模态搜索解决方案。为用户提供模拟教程与实战演练,学习RDS MySQL实例连接与数据管理技能,助力企业智能化发展。每周解锁数据库实战新场景,抓紧时间,精彩不容错过!
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
|
2月前
|
存储 关系型数据库 分布式数据库
|
28天前
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
66 26
|
20天前
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
48 15
|
14天前
|
数据采集 Web App开发 JavaScript
无头浏览器技术:Python爬虫如何精准模拟搜索点击
无头浏览器技术:Python爬虫如何精准模拟搜索点击
|
14天前
|
存储 人工智能 关系型数据库
诚邀您参加《智启云存:AI时代数据库RDS存储新突破》线上闭门技术沙龙!
诚邀您参加6月11日(周三)14:00在线上举行的《智启云存:AI时代数据库RDS存储新突破》闭门活动。免费报名并有机会获得精美礼品,快来报名吧:https://hd.aliyun.com/form/6162
|
24天前
|
人工智能 关系型数据库 分布式数据库
媒体声音|从亚太到欧美,阿里云瑶池数据库凭何成为中企出海的技术底气?
在中企出海的时代浪潮中,瑶池数据库正凭借其技术创新、场景化解决方案、智能化能力、全球化布局,成为企业跨越挑战、构建全球竞争力的关键伙伴;同时也以硬核的技术实力证明了中国数据库的国际竞争力。
|
30天前
|
安全 Apache 数据库
【倒计时3天】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日,NineData联合Apache Doris与阿里云在深圳举办数据库技术Meetup。活动聚焦「数据实时分析」与「数据同步迁移」两大领域,邀请行业专家分享技术趋势、产品实践及解决方案,助力企业构建高效安全的数据管理体系。时间:14:00-17:30;地点:深圳新一代产业园2栋20楼会议室。线下名额有限(80人),速报名参与深度交流!
49 1
|
1月前
|
传感器 物联网 Linux
Python:蓝牙心率广播设备监测(BLE 心率监测器)技术解析与实现
本文探讨了如何使用 Python 脚本与支持蓝牙低功耗(BLE)心率广播的设备交互以获取实时心率数据。重点分析了 BLE 协议、GATT 服务模型,以及具体方法。此外,还讨论了华为手表等设备的兼容性问题。
197 19

推荐镜像

更多