pymysql 模块的使用
前言
1、什么是pymysql
pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
2、测试数据
CREATE DATABASE db_test; USE db_test; CREATE TABLE userinfo ( id INT PRIMARY KEY auto_increment, NAME CHAR (16) NOT NULL, PASSWORD CHAR (20) NOT NULL ); INSERT INTO userinfo (NAME, PASSWORD) VALUES ('fixd', '123'), ('kitty', '456');
一、查询数据
import pymysql # 连接数据数据库的必要信息 host = '127.0.0.1' # 数据库地址 port = 3306 # 端口 user = 'fixd' # 用户名 password = '123' # 密码 db = 'db_test' # 连接到的数据库名称 charset = 'utf8' # 字符编码,防止中文乱码 # 连接数据库 返回 数据库的连接 conn = pymysql.connect( host=host, port=port, user=user, password=password, db=db, charset=charset, ) # 获取游标 cur = conn.cursor() # 获取游标,pymysql.cursors.DictCursor以字典的形式 返回结果 # cur_dic = conn.cursor(pymysql.cursors.DictCursor) # 需要执行的sql语句 sql = "select name,password from userinfo" rows = cur.execute(sql) # 执行sql语句,返回值 受影响的行数 res = cur.fetchall() # 查询全部数据,默认返回的是元组的形式 print(res) # (('fixd', '123'), ('kitty', '456')) # res = cur.fetchone() # 获取下一个查询的结果,就是一条记录 # print(res) #('fixd', '123') # res = cur.fetchone() # 每执行一次 ,获取一条记录 # print(res) #('kitty', '456') # res = cur.fetchmany(2) # 指定每次获取的结果条数 # print(res) # (('fixd', '123'), ('kitty', '456')) # 以字典的形式返回结果 # rows = cur_dic.execute(sql) # res = cur_dic.fetchall() # print(res) # #[{'name': 'fixd', 'password': '123'}, {'name': 'kitty', 'password': '456'}] # 回收资源 cur.close() conn.close()
PS:
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
- fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
- fetchmany(size=None): 获取指定行数的结果
- fetchall(): 接收全部的返回结果行.
- rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
- 在服务端防止sql注入问题:不要自己拼接字符串,让pymysql模块去拼接
二、插入数据
import pymysql # 连接数据数据库的必要信息 host = '127.0.0.1' # 数据库地址 port = 3306 # 端口 user = 'fixd' # 用户名 password = '123' # 密码 db = 'db_test' # 连接到的数据库名称 charset = 'utf8' # 字符编码,防止中文乱码 # 连接数据库 返回 数据库的连接 conn = pymysql.connect( host=host, port=port, user=user, password=password, db=db, charset=charset, ) # 获取游标 cur = conn.cursor() # # 第一种方式,直接拼接sql语句 # sql = "insert into userinfo(name,password) values ('%s','%s')" % ('lili','123') # rows = cur.execute(sql) # 执行sql语句,返回值 受影响的行数 # conn.commit() # 这一句必须执行,否则数据无法提交到数据库 # 第二种方式 , sql = "insert into userinfo(name,password) values (%s,%s)" # 插入单条数据 # rows = cur.execute(sql, ('lili1', '123')) # 插入多条数据 rows = cur.executemany(sql, [ ('kk1', '123'), ('kk2', '123'), ('kk3', '123'), ('kk4', '123'), ]) conn.commit() # 提交数据 必须提交 否则数据无法更新到数据库 # 回收资源 cur.close() conn.close()
三、更新数据、删除数据
import pymysql # 连接数据数据库的必要信息 host = '127.0.0.1' # 数据库地址 port = 3306 # 端口 user = 'fixd' # 用户名 password = '123' # 密码 db = 'db_test' # 连接到的数据库名称 charset = 'utf8' # 字符编码,防止中文乱码 # 连接数据库 返回 数据库的连接 conn = pymysql.connect( host=host, port=port, user=user, password=password, db=db, charset=charset, ) # 获取游标 cur = conn.cursor() # # 更新数据 # sql = "update userinfo set password = %s where name = %s" # cur.execute(sql,('789','kk2')) # conn.commit() # 提交数据 # 删除数据 sql = "delete from userinfo where name = %s" cur.execute(sql,'kk3') conn.commit() # 提交数据 # 回收资源 cur.close() conn.close()