1. 安装引入

2. 对象简介

3. 代码封装

1. 安装引入

1)安装:

pip install PyMySQL

2)Pycharm 中引入 pymysql:

1dbec4922a0bbd4609630ff98967632e.png

3)在文件中引入模块:

import pymysql

如果系统不支持 pip 命令,可以使用 git 命令下载安装包安装(也可以手动下载):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2. 对象简介

Connection 对象

作用:用于建立与数据库的连接。通过调用 connect() 方法来创建对象:

conn = connect(host, port, db, user, password, charset)
  • host:连接的 mysql 主机,本机则为 'localhost'。
  • port:连接的 mysql 主机的端口,默认是 3306。
  • db:数据库的名称。
  • user:连接的用户名。
  • password:连接的密码。
  • charset:通信采用的编码方式,默认是 'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码。

对象的方法

  • close():关闭连接。
  • commit():提交事务,即需要提交才会生效。
  • rollback():回滚事务,即放弃之前的操作。
  • cursor():返回 Cursor 对象,用于执行 sql 语句并获得结果。

Cursor 对象

作用:执行 sql 语句。通过调用 Connection 对象的 cursor() 方法来创建对象:

cursor1 = conn.cursor()

对象的方法

  • close():关闭。
  • execute(operation [, parameters]):执行语句,返回受影响的行数。
  • fetchone():执行查询语句时,获取查询结果集的第一行数据,返回一个元组。
  • fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回。
  • scroll(value[, mode]):将行指针移动到某个位置。
    • mode:表示移动的方式。
    • mode默认值为 relative,表示基于当前行移动到 value,value 为正则向下移动,value 为负则向上移动。
    • mode的值为 absolute,表示基于第一条数据的位置,第一条数据的位置为 0。

对象的属性

  • rowcount:只读属性,表示最近一次 execute() 执行后受影响的行数。
  • connection:获得当前连接对象。

代码范例

 1 import pymysql
2
3 conn = pymysql.connect(host="localhost", port=3307, db="电商销售", user="root", passwd="admin123", charset='utf8')
4 cursor = conn.cursor()
5 cursor.execute("select %s from %s;" % ("*", "产品信息"))
6 first_row = cursor.fetchone() # 取第一行数据
7 print(first_row)
8 second_row = cursor.fetchone() # 取下一行数据(第二行)
9 print(second_row)
10 all_row = cursor.fetchall() # 取剩下的所有行数据(第三行及之后)
11 print(all_row)

执行结果:

7d9b94e7862d5dde7f8024fe7d48ee23.png

3. 代码封装

观察发现,除了 sql 语句及参数不同,其它语句都是一样的,故创建 MysqlTool 封装类。

 1 import pymysql
2
3
4 class MysqlTool:
5
6 def __init__(self, host, port, db, user, passwd, charset="utf8"):
7 self.host = host
8 self.port = port
9 self.db = db
10 self.user = user
11 self.passwd = passwd
12 self.charset = charset
13
14 def connect(self):
15 '''创建数据库连接与执行对象'''
16 try:
17 self.conn = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, passwd=self.passwd, charset=self.charset)
18 self.cursor = self.conn.cursor()
19 except Exception as e:
20 print(e)
21
22 def close(self):
23 '''关闭数据库连接与执行对象'''
24 try:
25 self.cursor.close()
26 self.conn.close()
27 except Exception as e:
28 print(e)
29
30 def get_one(self, sql, params=()):
31 '''获取一行数据'''
32 try:
33 self.cursor.execute(sql, params)
34 result = self.cursor.fetchone()
35 except Exception as e:
36 print(e)
37 else:
38 return result
39
40 def get_all(self, sql, params=()):
41 '''获取全部行的数据'''
42 try:
43 self.cursor.execute(sql, params)
44 result = self.cursor.fetchall()
45 except Exception as e:
46 print(e)
47 else:
48 return result
49
50 def __edit(self, sql, params=()):
51 '''增删改查的私有方法'''
52 try:
53 execute_count = self.cursor.execute(sql, params)
54 self.conn.commit()
55 except Exception as e:
56 print(e)
57 else:
58 return execute_count
59
60 def insert(self, sql, params=()):
61 '''插入数据'''
62 return self.__edit(sql, params)
63
64 def update(self, sql, params=()):
65 '''更新数据'''
66 return self.__edit(sql, params)
67
68 def delete(self, sql, params=()):
69 '''删除数据'''
70 return self.__edit(sql, params)

测试代码

1)创建表

create table userinfos(
id int primary key auto_increment,
uname varchar(20),
upwd char(40),
isdelete bit default 0
);

2)测试封装代码

 1 from hashlib import sha1
2
3
4 # 创建数据库连接与执行的对象
5 tool = MysqlTool("localhost", 3307, "电商销售", "root", "admin123")
6 tool.connet()
7
8 # 插入新用户数据
9 # 使用sha1加密,返回40位字符的密码串
10 s = sha1()
11 s.update("123".encode("utf8"))
12 new_pwd = s.hexdigest()
13 insert_sql = "insert into userinfos values(0, 'root', %s, 0)"
14 insert_params = (new_pwd)
15 row_count = tool.insert(insert_sql, insert_params)
16 print(row_count) # 1
17
18 # 登录查询
19 uname = input("请输入用户名:")
20 pwd = input("请输入密码:")
21 s.update(pwd.encode("utf8"))
22 new_pwd = s.hexdigest()
23 query_sql = "select * from userinfos where uname = %s"
24 query_params = uname
25 userinfo = tool.get_one(query_sql, query_params)
26 if not userinfo:
27 print("用户名错误")
28 else:
29 if userinfo[2] == new_pwd:
30 print("登录成功")
31 else:
32 print("密码错误")
33
34 # 关闭连接
35 tool.close()

python3 mysql API的更多相关文章

  1. Python3 MySQL 数据库连接 -PyMySQL

    Python 3  操作mysql http://www.runoob.com/python3/python3-mysql.html Python3 MySQL 数据库连接 本文我们为大家介绍 Pyt ...

  2. Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据

    Title:Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据 --2013-10-11 11:57 #include <stdio.h> ...

  3. c++连接mysql数据库(使用mysql api方式,环境VS2013+MYSQL5.6)

    转载请注明出处,原文地址http://www.cnblogs.com/zenki-kong/p/4382657.html 刚开始写博客,博主还只是个大三汪,学艺不精,如有错误还请前辈指出(>^ω ...

  4. c语言mysql api

    原文:c语言mysql api 1.mysql_affected_rows()            //返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. 2.mysql_ ...

  5. C 扩展库 - mysql API

    MySQL API C API Data Structures MYSQL This structure represents handler for one database connection. ...

  6. python3 mysql 多表查询

    python3 mysql 多表查询 一.准备表 创建二张表: company.employee company.department #建表 create table department( id ...

  7. c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)

    我的安装环境: (1)vs2013(32位版) (vs2013只有32位的 没有64位的,但是它可以编译出64位的程序)  : (2)mysql-5.7.15(64位) vs2013中的设置(按步骤来 ...

  8. Python3 MySQL 数据库连接

    什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Python 数据库 AP ...

  9. Python3 - MySQL适配器 PyMySQL

    本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查. 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一 ...

随机推荐

  1. 字符串拼接出现null的问题

    最近在开发的过程中遇到这样的问题,原因是在做一个需求的时候,要求将解密的号码和前缀进行拼接.一开始在这个拼接的过程中,没有考虑到数据校验的问题,因为有可能他的前缀或者其他需要拼接的字段在前端传递的过程 ...

  2. MYSQL安全模式"sql_safe_updates"设置update和delete不带where的操作限制

    前言 在数据库操作中,如果在update和delete没有加上where条件,数据将会全部修改. 不只是初识mysql的开发者会遇到这个问题,工作有一定经验的开发者有时难免也会忘记写入where条件. ...

  3. java 阿里云短信发送

    记录自己的足迹,学习的路很长,一直在走着呢~ 第一步登录阿里云的控制台,找到此处: 点击之后就到此页面,如果发现账号有异常或者泄露什么,可以禁用或者删除  AccessKey: 此处方便测试,所以就新 ...

  4. Spring Boot和Thymeleaf整合,结合JPA实现分页效果

    在项目里,我需要做一个Spring Boot结合Thymeleaf前端模版,结合JPA实现分页的演示效果.做的时候发现有些问题,也查了现有网上的不少文档,发现能全栈实现的不多,所以这里我就把我的做法, ...

  5. LDAP + Samba 安装配置流程

    LDAP + Samba 安装配置 基础环境:Ubuntu18.04 安装samba root@cky:~# apt install samba smbldap-tools -y 查看版本 root@ ...

  6. Centos7修改Docker默认存储位置

    一.前言 Centos7安装docker之后,默认的镜像及容器存储路径为/var/lib/docker,可以使用命令docker info查看. 但是该路径默认使用的是系统盘的存储,如果挂载了数据盘, ...

  7. C++入门(1):计算机组成

    系列文章尽在 | 公众号:lunvey 学习C++之前,我们有必要了解一下计算机的简单组成,毕竟C++是需要操作内存的一门语言.大家或许知道内存是什么,但是内存怎么读取和操作数据以及数据的表现形式会不 ...

  8. CVE-2015-1635-HTTP.SYS远程执行代码

    这个漏洞刚好是在挖SRC的时候找到的,漏洞危害能打到服务器蓝屏,以下只作验证 参考 https://www.jianshu.com/p/2e00da8a12de https://blog.csdn.n ...

  9. 最简单的JVM内存结构图

    JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆. /** * @author :jiaolian * @dat ...

  10. Vue.js 学习笔记之七:使用现有组件

    5.3 使用现有组件 在之前的五个实验中,我们所演示的基本都是如何构建自定义组件的方法,但在具体开发实践中,并非项目中所有的组件都是需要程序员们自己动手来创建的.毕竟在程序设计领域,"不要重 ...