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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 技术笔记: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()


</

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
JSON 数据可视化 API
技术心得:如何用Python和API收集与分析网络数据?
技术心得:如何用Python和API收集与分析网络数据?
|
1天前
|
存储 缓存 网络协议
技术笔记:python使用memcached
技术笔记:python使用memcached
|
1天前
|
数据库连接 网络安全 Nacos
Nacos 的配置文件中修改了数据库的连接地址
Nacos 的配置文件中修改了数据库的连接地址
|
1天前
|
SQL Java 数据库连接
使用Python通过JDBC操作数据库(达梦数据库)
使用Python通过JDBC操作数据库(达梦数据库)
7 0
|
2天前
|
关系型数据库 MySQL 数据库
Python中使用MySQL模糊查询的方法
(1)同样需要将your_username、your_password、your_database替换为我们的MySQL数据库的实际用户名、密码和数据库名。 (2)在mysql.connector.connect()中,我们没有直接指定字符集和游标类型,因为mysql-connector-python的默认配置通常已经足够好。但是,如果需要,我们可以添加这些配置选项。 (3)使用cursor.close()和cnx.close()来确保游标和连接都被正确关闭。 (4)mysql-connector-python也支持使用上下文管理器(即with语句)来自动管理游标和连接的关闭,但这需要创建一个
|
2天前
|
Python
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
|
2天前
|
Python
技术心得记录:分分钟学会一门语言之Python3篇【转载】
技术心得记录:分分钟学会一门语言之Python3篇【转载】
|
2天前
|
文字识别 API C++
技术好文共享:编写Tesseract的Python扩展
技术好文共享:编写Tesseract的Python扩展
|
2天前
|
Shell Python
技术经验解读:使用python脚本传递参数:(三种方式可收藏)
技术经验解读:使用python脚本传递参数:(三种方式可收藏)
|
2天前
|
存储 关系型数据库 MySQL