怎么将python和mysql数据库连接

怎么将python和mysql数据库连接,第1张

在 Python 语言环境下我们这样连接数据库

In [1]: from mysql import connector

In [2]: cnx = connectorconnect(host="17216192100",port=3306,user="appuser",password="xxxxxx")

但是连接数据库的背后发生了什么呢?

答案

当我们通过驱动程序(mysql-connector-python,pymysql)连接 MySQL 服务端的时候,就是把连接参数传递给驱动程序,驱动程序再根据参数会发起到 MySQL 服务端的 TCP 连接。当 TCP 连接建立之后驱动程序与服务端之间会按特定的格式和次序交换数据包,数据包的格式和发送次序由 MySQL 协议 规定。MySQL 协议:>

MySQL 服务端向客户端发送一个握手包,包里记录了 MySQL-Server 的版本,默认的授权插件,密码盐值(auth-data)。

2 MySQL 客户端发出 ssl 连接请求包(如果有必要的话)。

3 MySQL 客户端发出握手包的响应包,这个包时记录了用户名,密码加密后的串,客户端属性,等等其它信息。

4 MySQL 服务端发出响应包,这个包里记录了登录是否成功,如果没有成功也会给出错误信息。

下载mysqlconnector库

然后把爬虫爬到的bai数据通过mysql里面的insert语句查到du数据库,当然也可以zhi建表dao,一般我没用python建表 是先建好再写数据的

import mysqlconnector

conn = mysqlconnectorconnect(

user='root',

password='root',

host='127001',

port='3306',

database='test_demo'

)

cursor = conncursor()

cursorexecute("INSERT INTO test_user(`uuid`,`user_name`,`user_level`) VALUES (%s,%s,%s)",[id, user_name, user_level])

cursorexecute("INSERT INTO tieba_user_detail(`user_name`,`user_exp`,`user_sex`,`tieba_age`,`tieba_note`,`user_favorites`,`user_fans`) VALUES (%s,%s,%s,%s,%s,%s,%s)",[user_name,user_exp,user_sex, tieba_age,tieba_note, user_favorites, user_fans])

print(' %s %s 数据保存成功 '%(user_rank,user_name))

conncommit()

cursorclose()

具体步骤: 序号 描述 1 去github上下载pymysql的安装包pymysql 2 解压到某个盘符下 3 打开cmd窗口(win环境下),进入pymysql的根目录下执行命令,python setuppy install 4 在程序里,导入pymysql 5 开始连接数据库 数据库 *** 作的API文档连接:

到python官方网站下载最新python程序。根据系统有32,64位。

直接下一步,就可以安装成功。

在python官网中去下载ez_setuppy文件。

此工具是python管理包工具,通过它可以下载很多服务。

请根据系统下载相关文件。

在python中执行python ez_setuppy文件,如果没有配置环境变量,可以在python安装路径中找到pythonexe,在此目录中执行上面命令。

命令执行成功后,会在python安装目录下easy_installexe工具包。

在CMD命令行执行:easy_installexe pymysql3

如果找不到该命令,切换服务到python安装目录/Scripts/下执行。如果此目录下没有easy_installexe,证明上一步没有安装成功。

安装pymysql3服务如下。

pymysql3服务安装成功后,开始写python程序连接mysql服务。

mysql数据库安装在此省略,到mysql官方网站下载,下一步安装就可以了。

python程序内容如下:import pymysql

conn = pymysqlconnect(user='root', passwd='root',

                 host='localhost', db='zjctest')

cur = conncursor()

curexecute("SELECT FROM zjc")

for r in cur:      

      print("row_number:" , (currownumber) )        

      print("id:"+str(r[0])+"name:"+str(r[1])+"age:"+str(r[2])) 

curclose()    

connclose()

执行结果如下,证明连接mysql数据库成功,且数据正确返回。

MySQL 的 Binlog 记录着 MySQL 数据库的所有变更信息,了解 Binlog 的结构可以帮助我们解析Binlog,甚至对 Binlog 进行一些修改,或者说是“篡改”,例如实现类似于 Oracle 的 flashback 的功能,恢复误删除的记录,把 update 的记录再还原回去等。本文将带您探讨一下这些神奇功能的实现,您会发现比您想象地要简单得多。本文指的 Binlog 是 ROW 模式的 Binlog,这也是 MySQL 8 里的默认模式,STATEMENT 模式因为使用中有很多限制,现在用得越来越少了。

Binlog 由事件(event)组成,请注意是事件(event)不是事务(transaction),一个事务可以包含多个事件。事件描述对数据库的修改内容。

现在我们已经了解了 Binlog 的结构,我们可以试着修改 Binlog 里的数据。例如前面举例的 Binlog 删除了一条记录,我们可以试着把这条记录恢复,Binlog 里面有个删除行(DELETE_ROWS_EVENT)的事件,就是这个事件删除了记录,这个事件和写行(WRITE_ROWS_EVENT)的事件的数据结构是完全一样的,只是删除行事件的类型是 32,写行事件的类型是 30,我们把对应的 Binlog 位置的 32 改成 30 即可把已经删除的记录再插入回去。从前面的 “show binlog events” 里面可看到这个 DELETE_ROWS_EVENT 是从位置 378 开始的,这里的位置就是 Binlog 文件的实际位置(以字节为单位)。从事件(event)的结构里面可以看到 type_code 是在 event 的第 5 个字节,我们写个 Python 小程序把把第383(378+5=383)字节改成 30 即可。当然您也可以用二进制编辑工具来改。

找出 Binlog 中的大事务

由于 ROW 模式的 Binlog 是每一个变更都记录一条日志,因此一个简单的 SQL,在 Binlog 里可能会产生一个巨无霸的事务,例如一个不带 where 的 update 或 delete 语句,修改了全表里面的所有记录,每条记录都在 Binlog 里面记录一次,结果是一个巨大的事务记录。这样的大事务经常是产生麻烦的根源。我的一个客户有一次向我抱怨,一个 Binlog 前滚,滚了两天也没有动静,我把那个 Binlog 解析了一下,发现里面有个事务产生了 14G 的记录,修改了 66 万条记录!下面是一个简单的找出 Binlog 中大事务的 Python 小程序,我们知道用 mysqlbinlog 解析的 Binlog,每个事务都是以 BEGIN 开头,以 COMMIT 结束。我们找出 BENGIN 前面的 “# at” 的位置,检查 COMMIT 后面的 “# at” 位置,这两个位置相减即可计算出这个事务的大小,下面是这个 Python 程序的例子。

切割 Binlog 中的大事务

对于大的事务,MySQL 会把它分解成多个事件(注意一个是事务 TRANSACTION,另一个是事件 EVENT),事件的大小由参数 binlog-row-event-max-size 决定,这个参数默认是 8K。因此我们可以把若干个事件切割成一个单独的略小的事务

ROW 模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,这个行为是 binlog_row_image 参数控制的,这个参数有 3 个值,默认为 FULL,也就是记录列的所有修改,即使字段没有发生变更也会记录。这样我们就可以实现类似 Oracle 的 flashback 的功能,我个人估计 MySQL 未来的版本从可能会基于 Binlog 推出这样的功能。

了解了 Binlog 的结构,再加上 Python 这把瑞士军刀,我们还可以实现很多功能,例如我们可以统计哪个表被修改地最多?我们还可以把 Binlog 切割成一段一段的,然后再重组,可以灵活地进行 MySQL 数据库的修改和迁移等工作。

以上就是关于怎么将python和mysql数据库连接全部的内容,包括:怎么将python和mysql数据库连接、python列表套列表的数据结构怎么存入数据库、python怎样连接访问mysql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10116267.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存