

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,本文的重点就是详细的讲解如何使用python操作MySQL数据库。


安装PyMySQL
pip install PyMySQL
基本操作
# 1. 导入相关库import pymysql# 2. 连接MySQL服务器db = pymysql.connect(host='localhost', user='root', password='***', port=3306, db='dbtest', charset='utf8')# 3. 创建一个cursor游标对象cursor = db.cursor()# 4. sql语句sql = 'select version()'# 5. 执行sql语句cursor.execute(sql)# 6. 断开连接db.close()
可以看出,整个过程只有第四部的sql语句是需要根据实际情况进行编写的,其余步骤都是已经写死的,后续可以封装为一个类,方便重复调用。
六个常用的连接参数
db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='', charset='utf8')
host:数据库服务器所在的主机;user:登录的用户名;password:要使用的密码;port:要使用的MySQL端口,默认通常都可以。(默认值:3306);db:要使用的数据库,None不使用特定的数据库;charset:通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码;
cursor游标
游标对象:执行查询和获取结果,用于与数据库进行交互,
支持以下几种方法:
execute(query,args = None ) # 执行查询语句executemany(query,args):执行单条sql语句,但是重复执行参数列表里的参数,返回被引用的行数;fetchone() # 返回一行结果fetchall() # 返回所有查询结果fetchmany(size=None) # 接收大小条返回结果行。如果size的值大于返回的结果行的数量,则返回cursor.arraysize条数据
Python增删改查操作
创建表
import pymysqldb = pymysql.connect(host='localhost', user='root', password='root123',port=3306, db='dbtest', charset='utf8')# 创建一个游标对象;cursor = db.cursor()# 建表语句;sql = """create table person(id int auto_increment primary key not null,name varchar(10) not null,age int not null) charset=utf8"""# 执行sql语句;cursor.execute(sql)# 断开数据库的连接;db.close()
插入数据
注意:插入多条数据使用的是executemany()
import pymysqldb = pymysql.connect(host='localhost', user='root', password='root123',port=3306, db='dbtest', charset='utf8')cursor = db.cursor()# 插入数据sql = """insert into person(name, age) values (%s, %s)"""datas = [('刘备', 62), ('诸葛亮', 53), ('关羽', 56), ('张飞', 53)]try:cursor.executemany(sql, datas)db.commit()print("插入成功")except:print("插入失败")db.rollback()db.close()
更新数据
import pymysqldb = pymysql.connect(host='localhost', user='root', password='root123',port=3306, db='dbtest', charset='utf8')cursor = db.cursor()sql = """update person set name = %s where age > %s"""try:cursor.execute(sql, ('如来佛祖', 100))db.commit()print("更新成功")except:print("更新失败")db.rollback()db.close()
删除数据
importpymysqldb=pymysql.connect(host='localhost', user='root', password='root123',port=3306, db='dbtest', charset='utf8')cursor=db.cursor()sql="""delete from person where age = 10000"""try:cursor.execute(sql)db.commit()print("删除成功")except:print("删除失败")db.rollback()db.close()
查询操作:
fetchone():获取下一个查询结果
fetchall():接收全部返回结果
import pymysql...:...: db = pymysql.connect(host='localhost', user='root', password='root123',...: port=3306, db='dbtest', charset='utf8')...: cursor = db.cursor()...: sql = """select name,age from person"""...: cursor.execute(sql)...: res = cursor.fetchall()...: for n, a in res:...: c = '我的名字教{},今年{}岁'.format(n, a)...: print(c)...: db.close()...:我的名字教刘备,今年62岁我的名字教诸葛亮,今年53岁我的名字教关羽,今年56岁我的名字教张飞,今年53岁
封装类
注意:调用封装好的类:from classMySQL import DBHandler
import pymysqlfrom pymysql.cursors import DictCursorclass DBHandler(object):# 实例化def __init__(self,host=None, # 连接名port=3306, # 端口user=None, # 用户民password=None, # 密码charset=None,database=None, # 数据库名cursorclass=DictCursor,**kwargs):self.connect = pymysql.connect(host=host,port=port,user=user,password=password,charset=charset,database=database,cursorclass=cursorclass,**kwargs)# 创建游标对象self.cursor = self.connect.cursor()def close(self):"""关闭:return:"""self.cursor.close()self.connect.close()def get_one(self, query, args=None):"""查询一条数据:param query: 执行sql语句:param args: 与查询语句一起传递的参数(给语句传参)包括:元组、列表、字典:return: 返回查询结果"""self.cursor.execute(query, args)self.connect.commit()return self.cursor.fetchone()def get_all(self, query, args=None):"""查询所有数据:param query: 执行sql语句:param args: 与查询语句一起传递的参数(给语句传参)包括:元组、列表、字典:return: 返回查询结果"""self.cursor.execute(query, args)self.connect.commit()return self.cursor.fetchall()def query(self, query, args=None, one=True):"""主体查询:判断查询一条数据还是查询所有数据:param query: 执行sql语句:param args: 与查询语句一起传递的参数(给语句传参)包括:元组、列表、字典:param one: True:执行get_one,否则执行get_all:return: 返回查询结果"""if one:return self.get_one(query, args)return self.get_all(query, args)def insert(self, sql, datas=None, one=True):"""插入数据:param sql: 插入数据语句:param datas: 需要插入的数据(插入多条数据时使用):param one: True:插入一条数据(执行execute()),否则插入多条数据(执行executemany()):return:"""if one:try:self.cursor.execute(sql)self.connect.commit()print('数据插入成功')self.close()except:self.connect.rollback()print('数据插入失败')self.close()else:try:self.cursor.executemany(sql, datas)self.connect.commit()print('数据插入成功')self.close()except:self.connect.rollback()print('数据插入失败')self.close()def update(self, sql):"""更新数据:param sql: 更新数据语句:return:"""self.cursor.execute(sql)self.connect.commit()self.cursor.close()def delet(self, sql):"""删除数据:param sql: 删除数据语句:return:"""self.cursor.execute(sql)self.connect.commit()self.cursor.close()
调用DBHandler 查询数据
from classMySQL import DBHandler...:...: # 实例化DBHandler...: db = DBHandler(...: host='localhost',...: port=3306,...: user='root',...: password='***',...: charset='utf8',...: database='DBsupermarket'...: )...: sql = 'SELECT * FROM singleBack LIMIT 3;'...: res = db.query(sql, one=False)...:resOut[56]:[{'order_id': 'CN-2018-100602576', 'single_back': 1},{'order_id': 'CN-2018-102104829', 'single_back': 1},{'order_id': 'CN-2018-104201581', 'single_back': 1}]
文章转载自学渣的数据分析日常,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




