Python与Mysql怎么完成大量的数据交互?
off999 2024-10-12 06:14 25 浏览 0 评论
如果你不了解python,可以先了解python的简单用法。不过人邮君相信,在座的各位都是大佬,我们直接介绍操作。
第一部分,我们先来介绍python与mysql如何完成数据交互:
python 与 mysql 实现交互的过程,通常分为:建立连接、把sql语句定义为字符串,提交指令、关闭连接。
核心的技能在于 sql语句;除了定义sql语句,其余3个处理都是固定的写法。接下来,人邮君结合《MySQL是怎样运行的》这本书,以Linux环境为主,为大家进行说明。
MySQL是怎样运行的 从根儿上理解MySQL
首先来看第一步,安装 MySQL 数据库:
如果你想要使用python操作MySQL数据库,就必须先要安装pymysql库,这个库的安装很简单;
第二步,pymysql 模块安装与使用:
MySQL-python驱动,是python 操作mysql必不可少的模块。
下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录:
>>python setup.py install
下载地址:https://pypi.python.org/pypi/MySQL-python/
第三步,python与mysql的交互实现:
1)连接
pymysql .connect () 函数:连接数据库
使用 pymysql 的 connect() 方法连接数据库,涉及到几个参数,具体代表意义如下:
host:MySQL服务的地址,若数据库在本地上,使用 localhost 或者127.0.0.1。如果在其它服务器上,则写对应的 IP地址
port:服务的端口号,默认为3306,不写则为默认值。
user:登录数据库的用户名
passwd:登录 MySQL 的密码
db:数据库名
charset:设置为 utf8 编码,解决存汉字乱码问题
eg:
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
print(conn)
print(type(conn))
输出结果显示如下:表面数据库连接成功
详细可以参考
https://www.cnblogs.com/qjj19931230/p/12550384.html?utm_source=tuicool
这里要强调的是,除了上面的连接方式,还有其他的连接。在《MySQL是怎样运行的》这本书中,介绍到,mysql连接分为内连接和外连接。内外连接的根本区别是在驱动表中记录不符合ON子句中的连接条件时,内连接不会把该记录加入到最后的结果集中,而外连接会。外连接分为左(外)连接和右(外)连接。
三种链接方式如下图所示:
2)获取游标
conn.cursor():获取游标
对数据库进行操作,只连接数据库是不够的,还需要获取操作数据库的游标,才能进行后续的操作。游标的主要作用是用来接收数据库操作后的返回结果,比如数据查询、插入和删除等。通过获取到的数据库连接实例 conn 下的 cursor() 方法来创建游标,如下:
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
print(cursor_test)
3)数据库操作
- 创建表
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor_test.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE user1 (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor_test.execute(sql)
# 关闭数据库连接
conn.close()
如下所示数据库表创建成功:
mysql> desc user1;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| FIRST_NAME | char(20) | NO | | NULL | |
| LAST_NAME | char(20) | YES | | NULL | |
| AGE | int(11) | YES | | NULL | |
| SEX | char(1) | YES | | NULL | |
| INCOME | float | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
- 插入数据
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
# 使用预处理语句创建表
sql = """INSERT INTO user1(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Fei', 'Fei', 20, 'M', 1000)"""
try:
# 执行sql语句
cursor_test.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 如果发生错误则回滚
conn.rollback()
# 关闭数据库连接
conn.close()
- 查询数据
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# 获取连接下的游标
cursor_test = conn.cursor()
sql = """
select * from user1"""
try:
# 执行 sql 语句
cursor_test.execute(sql)
# 显示出所有数据
data_result = cursor_test.fetchall()
for row in data_result:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income))
except:
print("Error: unable to fetch data")
# 关闭数据库连接
conn.close()
- 删除操作
# 导入模块
import pymysql
# 打开数据库连接
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="test_db",
charset="utf8")
# print(conn)
# print(type(conn))
# 获取连接下的游标
cursor_test = conn.cursor()
sql = "DELETE * FROM user1"
try:
# 执行SQL语句
cursor_test.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 发生错误时回滚
conn.rollback()
# 关闭数据库连接
conn.close()
第二部分,我们来介绍如何实现「大量」数据的交互?
在《MySQL是怎样运行的》,作者小孩子4919强调,嵌套循环连接算法是指驱动表只访问一次,但被驱动表却可能会访问多次,访问次数取决于驱动表执行单表查询后的结果集中有多少条记录,大致过程如下:
步骤1,选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的单表访问方法来执行对驱动表的单表查询;
步骤2,对步骤1中查询驱动表得到的结果集中的每一条记录,都分别到被驱动表中查找匹配的记录。
由于被驱动表可能会访问多次,因此可以为被驱动表建立合适的索引以加快查询速度。
所以,如果被驱动表非常大,即需要完成大量的数据交换,多次访问被驱动表可能导致很多次的磁盘I/O读取操作,此时可以使用基于块的嵌套循环连接算法来缓解由此造成的性能损耗。Mysql的设计者,提出了名为Join Buffer(连接缓冲区)的概念:
有兴趣的同学,建议根据书中详细描述走一遍。
此外,人邮君特别建议大家看看《MySQL是怎样运行的》,它解决了“为什么这个SQL语句执行得这么慢?为什么我明明建立了索引,但是查询计划显示没用?为什么IN查询中的参数一多就不使用索引了?为什么我的数据显示成了乱码?”等等每一位DBA和后端开发人员在与MySQL打交道时,所遇到的很多常见问题。除此之外,索引结构、MVCC、隔离级别的实现、锁的使用等知识,也是求职人员在MySQL面试中躲不过去的高频问题,作者都在书中给出了很详细的介绍。
MySQL是怎样运行的 从根儿上理解MySQL
这本书的初稿最初是以小册的形式发布在掘金平台上的,一经发布便得到大家的青睐,十分火爆!历经两年,现在终于成书,有兴趣的小伙伴也可以去掘金围观~(小孩子4919 的个人主页)
从底层到应用,从基础到进阶,关于MySQL的一切,作者都在书中讲解得非常清楚,帮助你从根儿上理解MySQL。
相关推荐
- 全网第一个讲清楚CPK如何计算的Step by stepExcel和Python同时实现
-
在网上搜索CPK的计算方法,几乎全是照搬教材的公式,在实际工作做作用不大,甚至误导人。比如这个又比如这个:CPK=min((X-LSL/3s),(USL-X/3s))还有这个,很规范的公式,也很清晰很...
- [R语言] R语言快速入门教程(r语言基础操作)
-
本文主要是为了从零开始学习和理解R语言,简要介绍了该语言的最重要部分,以快速入门。主要参考文章:R-TutorialR语言程序的编写需要安装R或RStudio,通常是在RStudio中键入代码。但是R...
- Python第123题:计算直角三角形底边斜边【PythonTip题库300题】
-
1、编程试题:编写一个程序,找出已知面积和高的直角三角形的另外两边(底边及斜边)。定义函数find_missing_sides(),有两个参数:area(面积)和height(高)。在函数内,计算另外...
- Tensor:Pytorch神经网络界的Numpy
-
TensorTensor,它可以是0维、一维以及多维的数组,你可以将它看作为神经网络界的Numpy,它与Numpy相似,二者可以共享内存,且之间的转换非常方便。但它们也不相同,最大的区别就是Numpy...
- python多进程编程(python多进程进程池)
-
forkwindows中是没有fork函数的,一开始直接在Windows中测试,直接报错importosimporttimeret=os.fork()ifret==0:...
- 原来Python的协程有2种实现方式(python协程模型)
-
什么是协程在Python中,协程(Coroutine)是一种轻量级的并发编程方式,可以通过协作式多任务来实现高效的并发执行。协程是一种特殊的生成器函数,通过使用yield关键字来挂起函数的执行...
- ob混淆加密解密,新版大众点评加密解密
-
1目标:新版大众点评接口参数_token加密解密数据获取:所有教育培训机构联系方式获取难点:objs混淆2打开大众点评网站,点击教育全部,打开页面,切换到mobile模式,才能找到接口。打开开发者工具...
- python并发编程-同步锁(python并发和并行)
-
需要注意的点:1.线程抢的是GIL锁,GIL锁相当于执行权限,拿到执行权限后才能拿到互斥锁Lock,其他线程也可以抢到GIL,但如果发现Lock仍然没有被释放则阻塞,即便是拿到执行权限GIL也要立刻...
- 10分钟学会Python基础知识(python基础讲解)
-
看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了。最好还是把代码敲一下。一、函数基础简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行。...
- Python最常见的170道面试题全解析答案(二)
-
60.请写一个Python逻辑,计算一个文件中的大写字母数量答:withopen(‘A.txt’)asfs:count=0foriinfs.read():ifi.isupper...
- Python 如何通过 threading 模块实现多线程。
-
先熟悉下相关概念多线程是并发编程的一种方式,多线程在CPU密集型任务中无法充分利用多核性能,但在I/O操作(如文件读写、网络请求)等待期间,线程会释放GIL,此时其他线程可以运行。GIL是P...
- Python的设计模式单例模式(python 单例)
-
单例模式,简单的说就是确保只有一个实例,我们知道,通常情况下类其实可以有很多实例,我们这么来保证唯一呢,全局访问。如配置管理、数据库连接池、日志处理器等。classSingleton: ...
- 更安全的加密工具:bcrypt(bcrypt加密在线)
-
作为程序员在开发工作中经常会使用加密算法,比如,密码、敏感数据等。初学者经常使用md5等方式对数据进行加密,但是作为严谨开发的程序员,需要掌握一些相对安全的加密方式,今天给大家介绍下我我在工作中使用到...
- 一篇文章搞懂Python协程(python协程用法)
-
前引之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。但是我们知道无论是创建多进程还是创建多线...
- Python开发必会的5个线程安全技巧
-
点赞、收藏、加关注,下次找我不迷路一、啥是线程安全?假设你开了一家包子铺,店里有个公共的蒸笼,里面放着刚蒸好的包子。现在有三个顾客同时来拿包子,要是每个人都随便伸手去拿,会不会出现混乱?比如第一个顾...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)