python之 *** 作mysql数据库

python之 *** 作mysql数据库,第1张

第三节–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其他基础,我有学习到陆续更新上来的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/580028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存