安装PyMySQL

python中连接mysql的客户端主要有mysqldb、mysql-connector、pymysql三种。虽说性能上面各有差别,但是主流市场还是以操作便捷、使用简单为选择条件。

这里我选择以纯python编写的mysql连接库pymysql为首。

安装

pip3 install PyMySQL

打开数据库连接

以下两种写法可以打开数据库连接,返回db对象。

db = pymysql.connect("127.0.0.1", "root", "132456", "test")

db= pymysql.connect(host="127.0.0.1",user="root",password="132456",database="test")

获取游标

我们在python中使用mysql接口操作数据库,对于mysql来说,python就是客户端,在python客户端中,执行SQL统一要用到游标对象,游标是数据库中一个很重要的概念,字面意思就是游动的标记。

我们正常查询数据,会用变量来接收SQL语句查询返回的结果集,假设说我们的查询量非常巨大,达到几千万上亿行数据,那么我们的服务器内存会直线飙升,引起程序崩溃。如果查出来的数据还要遍历进行处理的话,那么程序崩溃*2

但若是使用游标对象来查询,查出的结果集不会立刻返回给客户端,而是会存储在mysql服务器上,可以理解成是mysql为用户查询操作开设的一个缓冲区,用来存储查询结果,然后客户端从这个缓冲区中获取数据内容。

从db对象中获取游标

cursor = db.cursor()

创建表

sql = '''CREATE TABLE user(

id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增id',

username VARCHAR(16) NOT NULL COMMENT '姓名',

sex INT(1) UNSIGNED NOT NULL COMMENT '性别 1男2女',

age INT(11) UNSIGNED NOT NULL COMMENT '年龄',

PRIMARY KEY (id)

)

ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;'''cursor.execute(sql)

cursor.close()

db.close()

增删改

如果你的数据库支持事务,那么pymysql在你建立游标的时候就自动开启了事务,所以我们想要让SQL执行生效,就必须要做提交事务的动作。

sql = '''INSERT INTO user(username,sex,age) VALUES ('小明',1,18);'''

try:

cursor.execute(sql)exceptException as e:

db.rollback()print(e)else:

db.commit()print('新增数据行的id是:{}'.format(cursor.lastrowid))

cursor.close()

db.close()

打印结果:

新增数据行的id是:1

修改操作和新增操作是一样的,当然修改操作取不到自增id,就算取结果也是0,但是它有一个受影响行数,执行execute方法会返回受影响行数,从游标中也一样可以取到。

sql = '''UPDATE user SET age = 19 WHERE id = 1'''count=0try:

count=cursor.execute(sql)exceptException as e:

db.rollback()print(e)else:

db.commit()print(f'受影响行数是:{count}')print(f'从游标中也可以取到受影响行数:{cursor.rowcount}')

cursor.close()

db.close()

打印结果:

受影响行数是:1

从游标中也可以取到受影响行数:1

删除和修改就完全是换条SQL而已,这里就不做多余的演示了。

查询

查询数据之后,我们要从游标中取结果,有两种取法,一次性全取和一行一行的取。

一次性全取 fetchall()

sql = '''SELECT * FROM user'''count=0try:

count=cursor.execute(sql)exceptException as e:print(e)print(f'查询到的数据行数是:{count}')

data=cursor.fetchall()print(data)

cursor.close()

db.close()

打印结果:

查询到的数据行数是:3

((1, '小明', 1, 19), (2, '小强', 1, 18), (3, '小花', 2, 17))

可以看到从游标中取到的结果集被装在了元组里,我们可以进一步遍历元组获取每一行:

sql = '''SELECT * FROM user'''count=0try:

count=cursor.execute(sql)exceptException as e:print(e)

data=cursor.fetchall()print(f'查询到的数据行数是:{count}')for row indata:if row[2] == 1:

sex= '男'

elif row[2] == 2:

sex= '女'

else:

sex= '未知'

print(f'ID号{row[0]}:姓名是{row[1]},性别是{sex},今年{row[3]}岁。')

cursor.close()

db.close()

打印结果:

查询到的数据行数是:3

ID号1:姓名是小明,性别是男,今年19岁。

ID号2:姓名是小强,性别是男,今年18岁。

ID号3:姓名是小花,性别是女,今年17岁。

一行一行取 fetchone()

sql = '''SELECT * FROM user'''count=0try:

count=cursor.execute(sql)exceptException as e:print(e)print(f'查询到的数据行数是:{count}')for i inrange(count):

row=cursor.fetchone()if row[2] == 1:

sex= '男'

elif row[2] == 2:

sex= '女'

else:

sex= '未知'

print(f'ID号{row[0]}:姓名是{row[1]},性别是{sex},今年{row[3]}岁。')

cursor.close()

db.close()

打印结果:

查询到的数据行数是:3

ID号1:姓名是小明,性别是男,今年19岁。

ID号2:姓名是小强,性别是男,今年18岁。

ID号3:姓名是小花,性别是女,今年17岁。

如果要对查出来的大量数据进行遍历处理,最好就是用游标一行一行的读出来处理,在上文获取游标小节中讲了,对变量进行遍历和从游标中取数据是两个概念,变量是存在于我们服务器内存中的,游标是数据库的资源句柄。

游标还有一个fetchmany()方法,传入一个int参数,指定获取几条数据,个人觉得是小概率用法。

python启动mysql_Python操作MySQL相关推荐

  1. python豆瓣mysql_python操作mysql

    pymysql:python操作mysql 安装pymysql >: pip3 install pymysql 增删改查 # 选取操作的模块 pymysql # pymysql连接数据库的必要参 ...

  2. python app mysql_Python 操作 MySQL 的5种方式

    不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的 5 种方式,你可以 ...

  3. python logging mysql_Python 操作 MySQL 的正确姿势

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MyS ...

  4. Python模块MySQLdb操作mysql出现2019错误:Can't initialize character set utf-8

    我使用python的MySQLdb模块实现了一个mysql client, 在测试时,出现了如下错误 Python模块MySQLdb操作mysql出现2019错误:Can't initialize c ...

  5. python数据库mysql_python数据库(mysql)操作

    一.软件环境 python环境默认安装了sqlite3,如果需要使用sqlite3我们直接可以在python代码模块的顶部使用import sqlite3来导入该模块.本篇文章我是记录了python操 ...

  6. python 操作mysql_Python 操作MySQL

    我的Python环境: Python 2.7.14 |Anaconda, Inc.| (default, Oct 16 2017, 17:29:19) [GCC 7.2.0] on linux2 Ty ...

  7. python增删改查mysql_Python操作MySQL(增删改查)

    Python操作MySQL数据库方法.方式总结 import pandas as pd import pymysql import sqlalchemy from sqlalchemy import ...

  8. python加mysql加界面用代码写_python加mysql_python操作mysql

    python操作mysql可用的第三方库有MySQLdb,pymysql等. 下面主要讲解MySQLdb: 1.用pip安装mysqlclient库,连接python和mysql pip3 insta ...

  9. python操作mysql_python操作MySQL

    python操作MySQL.执行SQL语句.获取结果集.遍历结果集.取得谋个字段.获取表字段名.将图片插入数据库.执行事务等各种代码示例和详细介绍,代码居多. 实例一: 取得MySQL的版本 在win ...

最新文章

  1. AI又被彩虹吹!​网易被预言为“下一个百度”?
  2. 【深度学习】一种关注于重要样本的目标检测方法!
  3. javascript对下拉列表框(select)的操作
  4. 休眠锁定模式–乐观锁定模式如何工作
  5. python初学者代码示例_Selenium 快速入门笔记和代码示例(Python版)
  6. SuperMap iObject入门开发系列之五管线属性查询
  7. 播客“日谈公园”完成数百万天使轮融资,来自头头是道基金
  8. Java常用类库-AutoCloseable
  9. Python3 递归算法
  10. 激活navicat12
  11. 短视频完美开源源码 后台+APP双端源码
  12. Java API II
  13. 计算机网络代表第几次革命,互联网:人类生产力的第三次革命
  14. 在wget中指定代理服务器
  15. 学习笔记(15):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-opencv播放rtsp海康摄像头和播放系统摄像头...
  16. Maxwell和Simplorer联合仿真设置注意事项
  17. R语言实例:diamonds 数据可视化分析报告
  18. 笔记本电脑也是一种微型计算机,计算机一级试题 很权威的哦
  19. bos新建工作流 服务器信息和更新端口,BOS技术支持博客 : BOS_集成消息中心开发指南...
  20. 西安华为OD面试体验

热门文章

  1. MySQL中的enum,char与varchar,decimal
  2. element ui 获取文件的路径_win10使用WinAppDriver实现UI自动化
  3. java web如何使用aws,amazon-web-services - 使用java Jedis连接到aws elasticache redis
  4. java中jtansforms,java – 使用AffineTransform旋转图像
  5. excel通过js导入到页面_基于Excel和Java自动化工作流程:发票生成器示例
  6. java练习_Java基础笔试练习(一)
  7. h5 bootstrap 小程序模板_青浦区社群小程序模板
  8. websecurity连接mysql_将MySQL连接器JAR放在我的WAR的WEB-INF / lib而不是tomcat lib中,使j_security_check失败...
  9. 【若依(ruoyi)】No message found under code ‘xxx‘ for locale ‘zh_CN‘.
  10. logback 的 filter