MySQL 之 pymysql

一、概述

pymysql是python用来连接mysql的工具,安装方式:pip install pymysql -i https://pypi.douban.com/simple

这里使用豆瓣的镜像安装,可能会快点

二、使用

pymysql内置非常多的方式来操作mysqlServer

1. 连接

首先还是剖其源码查看

  1. def __init__(self, host=None, user=None, password="",
  2. database=None, port=0, unix_socket=None,
  3. charset='', sql_mode=None,
  4. read_default_file=None, conv=None, use_unicode=None,
  5. client_flag=0, cursorclass=Cursor, init_command=None,
  6. connect_timeout=10, ssl=None, read_default_group=None,
  7. compress=None, named_pipe=None,
  8. autocommit=False, db=None, passwd=None, local_infile=False,
  9. max_allowed_packet=16*1024*1024, defer_connect=False,
  10. auth_plugin_map=None, read_timeout=None, write_timeout=None,
  11. bind_address=None, binary_prefix=False, program_name=None,
  12. server_public_key=None):

通常在项目中,数据库的连接的信息一般写在config.py文件中,然后调用即可

pysql.connect(host="", user="", password="", database="", charset="utf8md4")

以上connect的参数不必赘述

2. 执行SQL

先建一张表,用来测试数据

create database run default character set utf8mb4 collate utf8mb4_general_ci;

  1. create table info(
  2. id int primary key auto_increment,
  3. name varchar(20) not null,
  4. age int not null
  5. )charset=utf8mb4;

创建一个配置文件,用来存放数据库的连接信息


  1. '''
  2. 数据库连接信息
  3. '''
  4. HOST = "xxx.xxx.xxx.xxx"
  5. USER = "root"
  6. PASSWORD = "Asd.1234"
  7. DATABASE = "run"
  8. PORT = 3306

使用OOP思想来写基本框架

  1. import pymysql
  2. from config import HOST,USER, PASSWORD, DATABASE, PORT
  3. class ConnectToMysql(object):
  4. def __init__(self):
  5. self.db = pymysql.connect(host=HOST, user=USER, password=PASSWORD, database=DATABASE, port=PORT)
  6. self.cursor = self.db.cursor() # 执行完毕返回的结果集默认以元组显示
  7. def insert_to_db(self):
  8. '''
  9. 数据的插入操作
  10. '''
  11. pass
  12. def query(self):
  13. '''
  14. 数据的查询操作
  15. '''
  16. pass
  17. def upate(self):
  18. '''
  19. 数据的更新操作
  20. '''
  21. pass
  22. def delete(self):
  23. '''
  24. 数据的删除操作
  25. '''
  26. pass
  27. def main(self):
  28. pass
  29. if __name__ == "__main__":
  30. mysql = ConnectToMysql()
  31. mysql.main()

一下的代码只展示需要填充的方法

以上代码中,cursor为游标,而在执行SQL语句使用cursor.execute(SQL),当然,还有cusor.executemany(SQL)以执行多条SQL语句,其中的main函数需根据自身编写

2.1 插入数据

这里牵扯一个游标的问题,游标就是一个数据集合的指针,用来指向一条特定的数据行

通俗的讲,关系型数据库是面向集合的,在写sql 语句时,逻辑上也是面向集合的。而游标是面向行的,可以想象它是一个指针,逐行读取数据。

可以认为,通常的查询,就好像去提款机取款,例如,取1000,就是一次取1000;而游标是每次取100,取10次(假设100是最小单位)。

所以,通常游标是有“害” 的,会造成更多的I/O,消耗更多的资源,一般不建议使用游标。

存在即合理,有时候不得不使用游标,可能旧代码的写法,可能是业务复杂,而不得不使用游标;总之,它只是作为一种补充手段存在。

  1. def insert_to_db(self):
  2. '''
  3. 数据插入的操作:编写SQL、执行SQL、提交、关闭连接(当然,该实验中在最后关闭游标和连接)
  4. '''
  5. sql = "insert into info (name, age) values ('chancey', 18)"
  6. self.cursor.execute(sql)
  7. self.db.commit()
  8. self.cursor.close()
  9. self.db.close()

在插入数据之后必须提交才能将数据提交到数据库,现在查询一下数据库

  1. mysql> select * from run.info;
  2. +----+---------+-----+
  3. | id | name | age |
  4. +----+---------+-----+
  5. | 1 | chancey | 18 |
  6. +----+---------+-----+
  7. 1 row in set (0.00 sec)

执行多条SQL语句

  1. def insert_to_db(self):
  2. sql = "insert into info (name, age) values (%s, %s)"
  3. data = [("waller", 21), ("mary", 25)]
  4. self.cursor.executemany(sql, data)
  5. self.db.commit()
  6. self.cursor.close()
  7. self.db.close()

查看数据库

  1. mysql> select * from run.info;
  2. +----+---------+-----+
  3. | id | name | age |
  4. +----+---------+-----+
  5. | 1 | chancey | 18 |
  6. | 2 | waller | 21 |
  7. | 3 | mary | 25 |
  8. +----+---------+-----+
  9. 3 rows in set (0.00 sec)

2.2 查询数据

同样的,执行SQL语句,但是在想要返回查询结果,则需要用fet函数来接收

  • cursor.fetall() # 接收所有返回的查询结果
  • cursor.fetone() # 接收第一条返回的查询结果
  • cursor.fetmany() # 接收指定数量返回的查询结果,如果参数为空,则默认第一条
  1. def query(self):
  2. sql = "select name,age from info"
  3. self.cursor.execute(sql)
  4. info1 = self.cursor.fetchone() # 返回第一条结果
  5. info2 = self.cursor.fetchmany(2) # 返回剩下结果的前两条
  6. info3 = self.cursor.fetchall() # 返回剩下的所有结果
  7. print(info1)
  8. print(info2)
  9. print(info3)
  10. self.cursor.close()
  11. self.db.close()

需要注意的是,第一次提取的数据在第二次提取的集合中是没有的,所以,提取结果的次数直接影响提取的结果

另外,该方法返回的是元组

2.3 更新数据

话不多说,直接代码

  1. def upate(self):
  2. sql = "update info set age=%s where name=%s"
  3. self.cursor.execute(sql, [14, "waller"]) # 传多个参数需要用列表传参
  4. self.db.commit()
  5. self.cursor.close()
  6. self.db.close()

查询一下数据库

  1. mysql> select * from run.info;
  2. +----+---------+-----+
  3. | id | name | age |
  4. +----+---------+-----+
  5. | 1 | chancey | 18 |
  6. | 2 | waller | 14 |
  7. | 3 | mary | 25 |
  8. +----+---------+-----+
  9. 3 rows in set (0.00 sec)

2.4 删除数据

  1. def delete(self):
  2. sql = "delete from info where name=%s"
  3. self.cursor.execute(sql, "waller")
  4. self.db.commit()
  5. self.cursor.close()
  6. self.db.close()

查询数据库

  1. mysql> select * from run.info;
  2. +----+---------+-----+
  3. | id | name | age |
  4. +----+---------+-----+
  5. | 1 | chancey | 18 |
  6. | 3 | mary | 25 |
  7. +----+---------+-----+
  8. 2 rows in set (0.00 sec)

MySQL 之 pymysql的更多相关文章

  1. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  2. MySQL之pymysql模块

    MySQL之pymysql模块   import pymysql #s链接数据库 conn = pymysql.connect( host = '127.0.0.1', #被连接数据库的ip地址 po ...

  3. 第二百七十九节,MySQL数据库-pymysql模块操作数据库

    MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connec ...

  4. Python3操作MySQL基于PyMySQL封装的类

    Python3操作MySQL基于PyMySQL封装的类   在未使用操作数据库的框架开发项目的时候,我们需要自己处理数据库连接问题,今天在做一个Python的演示项目,写一个操作MySQL数据库的类, ...

  5. python成长之路【第十三篇】:Python操作MySQL之pymysql

    对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎 ...

  6. mysql、pymysql、SQLAlchemy

    1.MySQL介绍 http://www.cnblogs.com/wupeiqi/articles/5699254.html,基础操作参见此文章,此处不赘述. 安装:yum install mysql ...

  7. python操作mysql之pymysql

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11.mys ...

  8. Python操作MySQL -即pymysql/SQLAlchemy用法

    本节介绍Python对于MySQL的一些操作用法 模块1:pymysql(等同于MySQLdb) 说明:pymysql与MySQLdb模块的使用基本相同,学会pymysql,使用MySQLdb也就不是 ...

  9. Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy

    一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS ...

随机推荐

  1. Gunicorn-Django部署

    1. 简单部署 1. sudo pip3 install gunicorn 2. cd 到django项目中 sudo python3 manage.py migrate 3.启动服务:sudo py ...

  2. dubbo文档笔记

    配置覆盖关系 以 timeout 为例,显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似: 方法级优先,接口级次之,全局配置再次之. 如果级别一样,则消费 ...

  3. Linux基础文件类型

    一.文件时间 ls -l 文件名 仅看的是文件的修改时间 [root@linux ~]# ls -l /etc/passwd -rw-r--r-- root root 5月 : /etc/passwd ...

  4. 用CSS来定义<p>标签,要求实现以下效果:字体颜色再IE6下为黑色,IE7下为红色,IE8下为绿色,其他浏览器下为黄色。

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta name=&qu ...

  5. 使用sar进行性能分析

    sar可用于监控Linux系统性能,帮助我们分析性能瓶颈.sar工具的使用方式为”sar [选项] intervar [count]”,其中interval为统计信息采样时间,count为采样次数. ...

  6. 最简单的DWR例子

    什么是DWR? DWR是一个Open Source的 java项目.DWR可以让JavaScript调用运行在Web服务器里面的JAVA程序.简单一点或者专业一点就是Easy AJAX for JAV ...

  7. android——SQLite数据库存储(操作)

    public class MyDatabaseHelper extends SQLiteOpenHelper { //把定义SQL建表语句成字符串常量 //图书的详细信息 //ID.作者.价格.页数. ...

  8. 使用ArrayPool池化大型数组(翻译)

    原文链接:https://adamsitnik.com/Array-Pool/ 使用ArrayPool 简介 .NET的垃圾收集器(GC)实现了许多性能优化,其中之一就是,设定年轻的对象很快消亡,然而 ...

  9. 讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

  10. PostgreSQL数据库查询最近几天的数据

    pgsql语法类似mysql  ,下面总结几个pgsql工作会用到的求时间的语句 1.当前时间向前推一天\ SELECT current_timestamp - interval '1 day' 例: ...