Python操作之MySQL

这篇具有很好参考价值的文章主要介绍了Python操作之MySQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

安装PyMySQL

PyMySQL操作mysql步骤

创建表格

连接Mysql

游标

事务特性

事务提交

查数据库

增删数据库

封装mysql类

错误处理

总结


安装PyMySQL

在使用Python中我们都要安装相关的库,mysql在python经常使用的库为PyMySQL,安装如下:

pip install PyMySQL

PyMySQL操作mysql步骤

1.创建连接。使用PyMySQL模块提供的‘connect’函数连接mysql,返回一个`Connection`对象

2.获取游标。连接mysql成功之后,我们可以通过通过连接对象的`cursor`方法获取游标(`Cursor`)对象

3.生产需要的数据库语句

3.执行Mysql语句。通过游标对象的`execute`方法来执行我们所想执行的mysql语句,并返回结果,需要根据实际情况提交或回滚事务。

4.关闭游标。

4.关闭数据库连接

流程图如下:

Python操作之MySQL

实例代码如下:

import  pymysql
#连接数据库
conn=pymysql.connect(host='localhost',user='ian',password='ian123',database='ian',charset='utf8')
# 创建游标
cur=con.cursor()
# 生成数据库
sql='select * from tb_test'
#获取结果
cur.execute(sql)
# 获取所有记录  fetchall--获取所有记录   fetchmany--获取多条记录,需传参  fetchone--获取一条记录
all=cur.fetchall()
# 输出查询结果
print(all)
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
conn.close()

创建表格

在我们使用数据库之前,首先我们得有数据库,那么如何创建呢?如下:

-- 创建名为ian的数据库并指定默认的字符集
create database `ian` default character set utf8mb4;

-- 切换到ian数据库
use `ian`;

-- 创建表
create table `tb_test`
(
`no` int not null comment '编号',
`name` varchar(10) not null comment '名称',
`loc` varchar(20) not null comment '所在地',
primary key (`no`)
);

-- 插入4个数据
insert into `tb_test` values 
    (1, 'test1', '北京'),
    (2, 'test2', '上海'),
    (3, 'test3', '仙'),
    (4, 'test4', '深圳');

连接Mysql

在python中我们通过`connect`函数连接 MySQL 服务器,该函数会返回一个`Connection`对象

connect(host='localhost',port=3306,user='ian',password='ian123',db='n',charset='utf8')

connect的参数列表解释如下:

  1. host:连接的数据库服务器主机名,默认为本地localhost
  2. usr:连接数据库的用户名,默认为当前
  3. passwd:连接数据库的密码,无默认值
  4. db:连接的数据库名,无默认值
  5. conv:将文件映射到python类型的字典,默认为MySQLdb.converters.conversion
  6. cursorclass:cursor()使用的种类,默认值为MySQLdb.cursors.Cursor
  7. compress:启用协议压缩功能
  8. named_pipe:在windows中,与一个命名管道相连接
  9. init_command:一旦连接建立,就为数据库服务器指定一条语句来运行
  10. read_default_file:使用指定的MySQL配置文件
  11. read_default_group:读取的默认组。
  12. unix_socket:在unix中,连接使用的套接字,默认使用TCP。
  13. port:指定数据库服务器的连接端口,默认是3306。
  14. charset:表示连接使用的字符集 

但是为了让程序更加健壮,我们一般不会这样调用该函数,先不说麻烦与否,如果我们经常要修改连接参数,那么我们所有调用地方都会修改,这样的代码十分不健壮。所以我们应该使用模块化进行解决,代码如下:

import pymysql

def connect_mysql():
    db_config = {
        'host':'127.0.0.1',
        'port':3306,
        'user':'ian',
        'password':'ian123',
        'charset':'utf8'
    }
    conn = pymysql.connect(**db_config)
    return conn

游标

游标是系统为用户开设的一个数据缓存区,存放SQL语句执行的结果,用户可以用SQL语句逐一从游标中获取记录,并赋值给变量,交由Python进一步处理。

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。

正如前面我们使用Python对文件进行处理,那么游标就像我们打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。

事务特性

事务有以下四个标准属性的缩写ACID,通常被称为:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

原子性: 确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。

一致性: 确保数据库正确地改变状态后,成功提交的事务。

隔离性: 使事务操作彼此独立的和透明的。

持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在

事务提交

python中事务提交的三种方法:

1. autocommit=True   在连接数据库时,就设置自动提交事务

2.conn.autocommit(True)  在执行sql语句之前,设置自动提交

3.conn.commit()   执行sql语句之后,提交

代码如下:

import pymysql

def connect_mysql():
    db_config = {
        'host':'127.0.0.1',
        'port':3306,
        'user':'ian',
        'password':'ian123',
        'charset':'utf8',
        'autocommit':True     #第一种方法
    }
    conn = pymysql.connect(**db_config)
    return conn

conn = connect_mysql()
#conn.autocommit(True)   #第二种方法
cur = conn.cursor()
sql = "insert into tb_test values (5, 'test5', '桂林')"
cur.execute(sql)
#conn.commit()   #第三种方法

cur.close()
conn.close()

查数据库

获取查询结果函数如下:

fetchone获取一行

fetchmany获取多行

fetchall获取所有

import  pymysql
#连接数据库
conn=pymysql.connect(host='localhost',user='ian',password='ian123',database='ian',charset='utf8')
# 创建游标
cur=con.cursor()
# 生成数据库
sql='select * from tb_test'
#获取结果
cur.execute(sql)
# 获取所有记录  fetchall--获取所有记录   fetchmany--获取多条记录,需传参  fetchone--获取一条记录
all=cur.fetchall()
# 输出查询结果
print(all)
for row in all:
      no= row[0]
      name = row[1]
      loc= row[2]
      # 打印结果
      print "no=%s,name =%s,loc=%s" %(no, name , loc)
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
conn.close()

增删数据库

增删改,操作方式都一样,只是mysql语句的不同,返回的值是影响的行数。需要注意的是,我们需要提交事务,如果不提交事务,语句是不执行的,只是显示执行成功,但是表中并没有进行相关操作。代码如下:

import pymysql

def insert_mysql():
    no = int(input('编号: '))
    name = input('名称: ')
    location = input('所在地: ')

    # 1. 创建连接
    conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='ian', password='ian123',
                       database='test', charset='utf8')
    try:
        # 2. 获取游标对象
        with conn.cursor() as cursor:
            # 3. 通过游标对象向数据库服务器发出SQL语句
            affected_rows = cursor.execute(
                'insert into `tb_test` values (%s, %s, %s)',
                (no, name, location)
            )
            if affected_rows == 1:
                print('新增成功!!!')
        # 4. 提交事务
        conn.commit()
    except pymysql.MySQLError as err:
        # 4. 回滚事务
        conn.rollback()
        print(type(err), err)
    finally:
        # 5. 关闭连接释放资源
        conn.close()

def del_mysql():
    no = int(input('编号: '))

    # 1. 创建连接
    conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='ian', password='ian123',
                       database='test', charset='utf8',
                       autocommit=True)
    try:
        # 2. 获取游标对象
        with conn.cursor() as cursor:
            # 3. 通过游标对象向数据库服务器发出SQL语句
            affected_rows = cursor.execute(
                'delete from `tb_dept` where `dno`=%s',
                (no, )
        )
            if affected_rows == 1:
                print('删除成功!!!')
    finally:
        # 5. 关闭连接释放资源
        conn.close()

insert_mysql()
del_mysql()

封装mysql类

import pymysql
from pathlib import Path

class ConnectMsql:
    def __init__(self, host='127.0.0.1', port=3306, user='ian',
                 password='ian123', database="test", filename: str = "test.sql"):
        """
        :param host:        域名
        :param port:        端口
        :param user:        用户名
        :param password:    密码
        :param database:    数据库名
        :param filename:    文件名称
        """

        self._host: str = host
        self._port: int = port
        self._user: str = user
        self._password: str = password
        self._database: str = database
        self._file_path = Path(__file__).parent.joinpath(filename)

    def _show_databases_and_create(self):
        """
        查询数据库是否存在,不存在则进行新建操作
        :return:
        """
        connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,
                                     cursorclass=pymysql.cursors.DictCursor)
        with connection:
            with connection.cursor() as cursor:
                cursor.execute('show databases;')
                result = cursor.fetchall()
                results = self._database not in tuple(x["Database"] for x in result)

        if results:
            with connection.cursor() as cursor:
                cursor.execute(f'create database {self._database};')
            with connection.cursor() as cursor:
                cursor.execute('show databases;')
                result = cursor.fetchall()
                results = self._database in tuple(x["Database"] for x in result)
            return results if results else result
        else:
            return True

    def _export_databases_data(self):
        """
        读取.sql文件,解析处理后,执行sql语句
        :return:
        """
        if self._show_databases_and_create() is True:
            connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,
                                         database=self._database, charset='utf8')
            # 读取sql文件,并提取出sql语句
            results, results_list = "", []
            with open(self._file_path, mode="r+", encoding="utf-8") as r:
                for sql in r.readlines():
                    # 去除数据中的“\n”和“\r”字符
                    sql = sql.replace("\n", "").replace("\r", "")
                    # 获取不是“--”开头且不是“--”结束的数据
                    if not sql.startswith("--") and not sql.endswith("--"):
                        # 获取不是“--”的数据
                        if not sql.startswith("--"):
                            results = results + sql

                # 根据“;”分割数据,处理后插入列表中
                for i in results.split(";"):
                    if i.startswith("/*"):
                        results_list.append(i.split("*/")[1] + ";")
                    else:
                        results_list.append(i + ";")

            # 执行sql语句
            with connection:
                with connection.cursor() as cursor:
                    # 循环获取sql语句
                    for x in results_list[:-1]:
                        # 执行sql语句
                        cursor.execute(x)
                        # 提交事务
                        connection.commit()
                    else:
                        return "sql全部语句执行成功 !"

    @property
    def sql_run(self):
        """
        执行方法
        :return:
        """
        return self._export_databases_data()

if __name__ == '__main__':
    res = ConnectMsql().sql_run
    print(res)

错误处理

DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:

Python操作之MySQL

总结

该文章只是简单介绍一下python中怎么样使用mysql,但对mysql更多的知识没有进行详细的介绍,我想后面再专门使用一些章节给大家介绍。如果有不足的地方希望大家可以指出,希望可以帮到大家。谢谢大佬们啦,觉得还行也可以点个赞关注哦!!!文章来源地址https://www.toymoban.com/news/detail-477788.html

到了这里,关于Python操作之MySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python pymysql连接Mysql数据库-菜鸟教程

    1、安装pymysql模块 pip install pymysql 2、启动Mysql数据库服务 net start mysql80  3、连接数据库 运行结果如下  4、创建数据库表 执行成功后,在本地登录mysql数据库进行查看验证   5、数据库插入操作  执行程序后在本地查看验证  6、数据库查询操作 Python查询Mysql使用 fetchone() 方法

    2024年02月04日
    浏览(36)
  • Python中pymysql模块详解:安装、连接、执行SQL语句等常见操作

      在Python中,我们经常需要连接和操作数据库。pymysql是一个流行的Python模块,专门用于与MySQL数据库进行交互。本文将介绍pymysql模块的基本使用方法,以及它在实际开发中的一些应用场景。   pymysql是一个用于Python编程的第三方模块,用于连接和操作MySQL数据库。它提供

    2024年02月07日
    浏览(29)
  • 【Python笔记】Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面

    这篇文章,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。 目录 一、Python读取excel 1.1、安装xlrd库 1.2、打开excel工作簿 1.3、获取sheet工作表 1.4、操作row数据行 1.5、操作column数据列 1.6、操作单元格 二、读取excel数据保存到MySQL 2.1、完整代码 2.

    2024年02月15日
    浏览(48)
  • 一篇文章打好SQL基础,熟悉数据库的基础操作和方法,以及安装MySQL软件包和Python操作MySQL基础使用

    SQL的全称:Structured Query Language,结构化查询语言,用于 访问和处理数据库的标准计算机语言 。 SQL语言1974年有Boyce和Chamberlin提出的,并且首先在IBM公司研制的关系数据库系统SystemR上实现。 经过多年发展,SQL已经成为数据库领域同意的数据操作标准语言,可以说几乎市面上所

    2024年02月08日
    浏览(56)
  • pymysql的安装及操作

    以管理员身份运行终端或者使用Anaconda Powershell Prompt并以管理员身份运行 注意 :conda安装pymysql后,只有使用conda解释器才可以调用 1、找到python安装位置,打开终端输入 where python 2、输入cd 进入python位置目录 3、进入Scripts 4、输入pip install pymysql即可 Python中的sql这个字符串,格

    2024年02月11日
    浏览(27)
  • 如何查看自己电脑上是否成功安装了Mysql,以及如何查看mysql的安装目录

    1、打开cmd,输入命令:net start mysql查看服务是否启动,若显示已启动则表示安装成功 2、窗口+R,输入services.msc,在弹出的服务窗口中我们可以发现MySQL正在运行中,表示已经安装成功。 双击MySQL,在弹出的界面中可以查看到mysql对应的安装目录

    2024年03月25日
    浏览(50)
  • 【100天精通python】Day32:使用python操作数据库_MySQL下载、安装、配置、使用实战

    目录  专栏导读  1 MySQL概述 2 MySQL下载安装 2.1 下载  2.2 安装 2.3 配置

    2024年02月12日
    浏览(36)
  • ubuntu安装mysql8指定数据目录

    Ubuntu 22.04.3 LTS 更新到最新版本 添加 MySQL APT 仓库 执行命令期间需要按回车键,控制台提示 Press [ENTER] to continue or Ctrl-c to cancel. 安装 MySQL 在安装过程中,系统会提示你设置 root 用户的密码。 配置数据挂载目录 新目录为 /data/mysqldata 新建数据目录 将文件copy(MySQL 默认的数据目

    2024年02月02日
    浏览(30)
  • centos 9 安装mysql 到系统指定目录

    在CentOS 9上安装MySQL并将其安装到系统指定目录的步骤如下: 首先,确认已经正确配置了CentOS 9的网络连接。 打开终端并使用root用户登录。 添加MySQL Yum存储库。执行以下命令: 安装MySQL服务器和客户端软件包。执行以下命令: 启动MySQL服务。执行以下命令: 运行MySQL安全性脚

    2024年04月22日
    浏览(15)
  • docker 安装 mysql 并挂载 配置文件和数据目录

    1、宿主机创建挂载目录 2、搜索镜像 拉取官方支持版本(OFFICIAL 为 ok的版本) 3、以 mysql 作为基础镜像构建容器并挂载目录 your_password 为 mysql root 用户的密码 4、进入容器 执行上面命令后会要求输入密码,密码为 第三步的 your_password 5、退出容器

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包