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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 技术笔记: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
相关文章
|
2月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
136 68
|
27天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
184 15
|
30天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
154 3
|
3月前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
3月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
52 4
|
3月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
30 3
|
3月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
523 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
2月前
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
201 0