第三节–Python之操作mysql数据库

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
这个章节主要讲解使用python操作mysql数据库


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 第三节–Python之操作mysql数据库
  • 一、环境安装
  • 二、使用步骤
  • 1.思路步骤
  • 2.操作数据库<查>
  • 3.操作增删改
  • 4.操作数据库的封装
  • 总结

  • 一、环境安装

    提示:这里可以添加本文要记录的大概内容:

    首先在本地安装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其他基础,我有学习到陆续更新上来的

    来源:小白的测试之路

    物联沃分享整理
    物联沃-IOTWORD物联网 » python之操作mysql数据库

    发表评论