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数据库的主要内容,如果未能解决你的问题,请参考以下文章

22Python之mysql数据库操作

Python操作mysql之插入数据

mysql 之 用python操作数据库

python之操作mysql数据库

用python操作mysql数据库(之简单查操作)

python之操作mysql