python之操作mysql数据库
Posted 小白的测试之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之操作mysql数据库相关的知识,希望对你有一定的参考价值。
第三节–Python之操作mysql数据库
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
这个章节主要讲解使用python操作mysql数据库
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、环境安装
提示:这里可以添加本文要记录的大概内容:
首先在本地安装PyMySQL,安装方式Win+R -->输入cmd–>pip install PyMySQL
如果已经安装过,就会出现像图片中样子。
然后再去网上下载mysql,和Navicat 就可以了。当然Navicat 可以用其他替代,因为我本地就安装了这个软件。Navicat 破解版本可以再网上查找,还是有很多的。
提示:以下是本篇文章正文内容,下面案例可供参考
二、使用步骤
1.思路步骤
1、首先建立数据库的连接
2、生成游标
3、执行需要的数据库语句
4、获取查询结果
5、关闭游标
6、关闭数据库连接
2.操作数据库<查>
接下来我们来用python进行数据库的<查>这个操作,代码如下
代码如下(示例):
import pymysql
#连接数据库
con=pymysql.connect(host='localhost',user='root',password='root',database='huace',charset='utf8')
# 创建游标
cur=con.cursor()
# 生成数据库
sql='select * from sscore'
#获取结果
cur.execute(sql)
# 获取所有记录 fetchall--获取所有记录 fetchmany--获取多条记录,需传参 fetchone--获取一条记录
all=cur.fetchall()
# 输出查询结果
print(all)
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
cur.close()
这就成功啦。
我这里说几个注意点!!!
1、有的小伙伴执行运行出的结果可能都是’?‘,像图片这样
这个是因为pymysql.connect中的charset值与sql中的字符集不对应导致的。
那么如何看sql中的字段是什么字符集呢,我还是以Navicat 为例,如图
小伙伴们可以试试把代码中的charset='utf8’改为charset='utf-8’是不是会出现’?‘。
这里顺便我和大家解释一下,这里面几个字段的意思 host–连接数据库地址
user–数据库登录用户名 ,password=数据库登录密码,database=数据库的库名,charset=数据库字符集 port–数据库端口号 autocommit–事务提交,True是为自动提交 False为手动提交。
自行查看源码,了解每个字段的意思,这个源码查看有点绕,这里我也图片示范一下
源码我复制到下面
def __init__(self, host=None, user=None, password="",
database=None, port=0, unix_socket=None,
charset='', sql_mode=None,
read_default_file=None, conv=None, use_unicode=None,
client_flag=0, cursorclass=Cursor, init_command=None,
connect_timeout=10, ssl=None, read_default_group=None,
compress=None, named_pipe=None, no_delay=None,
autocommit=False, db=None, passwd=None, local_infile=False,
max_allowed_packet=16*1024*1024, defer_connect=False,
auth_plugin_map=, read_timeout=None, write_timeout=None,
bind_address=None, binary_prefix=False):
注意点2、如果有些小伙伴运行代码的时候输出一个数值,可以查看一下是否cur.fetchall()获取全部的这个语句。如果没有,那么控制台输出的值就是表中数量,就是这个表有多条数据。
3.操作增删改
代码如下(示例):
增删改,操作方式都一样,只是sql语句的不同,这里我就写一个代码中。这里需要注意的点是,我们需要提交事务,如果不提交事务,语句是不执行的,我先来一个不提交事务的,显示执行成功,但是表中并没有新增
然后我们;对它进行添加事务提交。
方式有两种,第一种在pymysql.connect中加上autocommit=True
第二种con.commit()
代码如下,代码上我使用的是第一种方法
import pymysql
#连接数据库 第一种autocommit=True
con=pymysql.connect(host='localhost',user='root',password='root',database='huace',charset='utf8',autocommit=True)
# 创建游标
cur=con.cursor()
# 生成数据库
sql='insert into sscore (name,class,socre) VALUES ("李四","语文",90)'
#获取结果
cur.execute(sql)
#提交事务 方法二
# con.commit()
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
cur.close()
如果需要删除,或者修改,只需修改sql语句就行了。
我们再讲一下一次增加多条数据如何操作,方式也是两种
import pymysql
#连接数据库 第一种autocommit=True
con=pymysql.connect(host='localhost',user='root',password='root',database='huace',charset='utf8',autocommit=True)
# 创建游标
cur=con.cursor()
# # 方式一
# # 生成数据库
# sql='insert into sscore (name,class,socre) VALUES ("李四","语文",90),("张六","语文",90)'
# #获取结果
# cur.execute(sql)
# 方式二
sql2='insert into sscore (name,class,socre) VALUES (%s,%s,%s)'
data=[("李四","语文",91),("张六","语文",91)]
#获取结果
cur.executemany(sql2,data)
#提交事务 方法二
# con.commit()
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
cur.close()
4.操作数据库的封装
今天太晚了,明天给补上,打打游戏睡觉了
来了来了 ,补上!!!
import pymysql
class Mysql_Object():
def __init__(self,host,user,password,database,port=3306,charset='utf8'):
self.host=host
self.user=user
self.password=password
self.database=database
self.port=port
self.charset=charset
def select_sql(self,sql,size=0):
'''
查询sql语句
:param sql 传入查询的sql语句,字符串
:param size 返回结果的记录条数,如果没有输入默认输出全部条数
:return: self.count 返回查询的记录的总数,slef.res 返回查询的结果
'''
self.con=pymysql.connect(host=self.host,user=self.user,password=self.password,database=self.database,port=self.port,charset=self.charset)
self.cur=self.con.cursor() #建立游标
self.sql=sql
# 判读是否是查询语句
if self.sql.startswith('select'):
self.cur.execute(self.sql) #获取数据库结果
self.count=self.cur.rowcount #统计查询记录数
# 通过if语句进行判断
if size == 0:
self.res=self.cur.fetchall() #输出全部结果
elif size != 0 :
self.res=self.cur.fetchmany(size) #输出指定数值
self.cur.close()
self.con.close() #关闭连接
return self.count,self.res
def excute_sql(self,sql):
'''
:param sql 输入增删改的sql语句
:return:
'''
self.con = pymysql.connect(host=self.host, user=self.user, password=self.password,port=self.port, database=self.database,
charset=self.charset,autocommit=True)
self.cur = self.con.cursor() # 建立游标
self.sql = sql
if self.sql.startswith('insert'):
print('插入语句',self.sql)
self.cur.execute(self.sql) #执行语句
self.cur.close() #关闭连接
self.con.close()
if self.sql.startswith('delete'):
print('删除语句',self.sql)
self.cur.execute(self.sql) # 执行语句
self.cur.close() # 关闭连接
self.con.close()
if self.sql.startswith('update'):
print('更新语句',self.sql)
self.cur.execute(self.sql) # 执行语句
self.cur.close() # 关闭连接
self.con.close()
# 调用
m=Mysql_Object('localhost','root','root','huace')
print(m.select_sql('select * from sscore',3))#查询结果
m.excute_sql('update sscore set name="王六"where `name`="张三"' ) #更新语句
m.excute_sql('delete from sscore where name="李四"') #删除语句
m.excute_sql('insert into sscore VALUES("赵七","英语","89")') #插入语句
控制台结果,如下
总结
提示:这里对文章进行总结:
这些都是看视频以后的一些总结,帮这个当作笔记本吧,将学习的内容简单的梳理一下,因为现在居家隔离,正常情况可以每天一更吧,下下周就去新公司入职了,可能就不会更新这么频繁了,大家一起共同进步吧,如果哪里有错误,或者不对的地方欢迎大家指出,毕竟刚学习不久还是有很多不足之处的。谢谢大家啦,觉得还行也可以点个赞哦!!!
后面我就陆续更新selenium框架了,python其他基础,我有学习到陆续更新上来的
以上是关于python之操作mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章