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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
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()


</

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
723 7
|
7月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
7月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
577 0
|
11月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
890 77
|
7月前
|
关系型数据库 MySQL 索引
MySQL多表练习笔记
链接可行,多表查询语法
169 0
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
348 68
|
SQL 关系型数据库 数据库连接
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
1292 15
|
SQL 关系型数据库 MySQL
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。

推荐镜像

更多