使用Python实现Mysql数据库相关操作详解

 更新时间:2023年08月08日 10:04:24   作者:灰勒塔德  
这篇文章主要介绍了使用Python实现Mysql数据库相关操作详解,pymysql是Python中操作数据库的第三方模块,通过这个模块的相关方法,我们可以连接并且去操作mysql数据库,需要的朋友可以参考下

前言:

前面学习了MySQL的基础语句,就有人会问,那怎么去通过编程语言来操作mysql数据库呢,这总不能只能用sql指令来去操作吧?答案是肯定可以通过编程语言去操作的,只是sql指令是操作数据库的基础指令,编程语言只是其辅助作用的,把数据库与其他程序进行结合。那这一期我就来讲解怎么去通过Python去连接MySQL数据库,同时实现数据库等相关操作

pymysql

什么是pymysql

pymysql是Python中操作数据库的第三方模块,通过这个模块的相关方法,我们可以连接并且去操作mysql数据库。

安装

进入cmd,然后输入

pip install pymysql

等待一段时间就会安装好了的,然后输入 pip list查看是否安装好,如图所示(说明已经安装好了):

好了,安装完成了之后就开始写代码了。

测试连接数据库

导入模块

import pymysql as psql

测试连接查询操作

import pymysql as psql
#连接数据库
db=psql.connect(
    host='localhost', #这里是表示数据库地址
    user='heweijie',    #这里是表示用户名
    password='heweijie',    #这里是表示password
    database='hello',   #这里是表示要连接的数据库名字
    charset='utf8'      #这里是字符编码,一般都选utf8
)
#创建读取游标
cur=db.cursor()
sql=r'select version();' #sql语句,查看mysql版本
cur.execute(sql)      #执行sql语句
data=cur.fetchone()   #返回一条信息
print(data)
cur.close()     #关闭游标
db.close()      #关闭数据库的连接
#输出结果:('8.0.30',)
 

这里可以看我们成功连接了数据库,同时返回一条结果,要注意,当我们去结束使用数据库的时候要记得去关闭数据库的连接,免得造成数据库的数据泄露等问题。

connect() 方法参数

参数说明
host=数据库连接地址
user=数据库用户名
password=数据库password
database=要连接的数据库名字
port=3306连接端口,一般玩3306
charset=utf8设置字符集,一般为utf8
connect_timeout=10连接数据库超时时间,一般默认为10秒
dsn数据源名称,给出该参数表示数据库依赖

返回结果fecthone、fecthmany、fecthall

当我们去执行sql查询指令的时候,我们要获取到返回的结果,但是返回的结果可以是单行,也可以是自定义多行,也可以是返回全部结果,要想实现这样的效果我们就要要用到fecthone、fecthmany、fecthall 这三个方法了。下面看例子

当前数据库表信息:

 
#创建读取游标
cur=db.cursor()
sql=r'select *from user' #sql语句,查看mysql版本
cur.execute(sql)      #执行sql语句
#返回一条信息
data1=cur.fetchone()
print('fecthone>>>',data1)
#返回自定义条数
data2=cur.fetchmany(5)
print('fetchmany>>>',data2)
#返回全部信息
data3=cur.fetchall()
print('fecthall>>>',data3)

这时你们会发现一个现象,每次返回信息后,再次获取信息时,就不会再返回这条信息了,而是接着往下读取。这里跟文本文件读取是一样的,游标cur是往下读取的,所以前面已经获取到的信息就不再会返回。如果你想返回前面的信息话,你可以重新创建游标,执行新的指令就OK了。

创建和管理数据库

sql指令是操作数据库的基础指令,而编程语言是起辅助作用的,所以真正意义上操作数据库的是sql指令,我们通过编程语言只是去把获取到的信息进行处理。这里就来看看怎么去通过Python来去创建一个数据库

import pymysql as psql
class Database:
    '''通过面对对象的方式去创建一个数据库以及
    实现数据库管理操作方法'''
    def __init__(self):
        self.db=psql.connect(
            host='localhost',
            user='heweijie',
            password='heweijie',
            charset='utf8'
        )
        #操作游标
        self.cur = self.db.cursor()
    def create(self,name):
        '''创建一个数据库,名字为name,自行输入'''
        try:
            sql=fr'create database if not exists {name}'
            self.cur.execute(sql)
        except Exception as e:
            print(e)
            print('创建失败')
            self.db.rollback() #事物的回滚操作,就是回到开始
    def showdatabases(self):
        '''查看全部数据库名字'''
        sql=r'show databases'
        self.cur.execute(sql)
        result=self.cur.fetchall()
        return result
    #删除数据库
    def dropdatabase(self,name):
        try:
            sql=fr'drop database {name}'
            self.cur.execute(sql)
        except Exception as e:
            print(e)
            print('删除失败')
            self.db.rollback()
    def close(self):
        '''关闭连接,结束操作'''
        self.cur.close()
        self.db.close()
#操作示例:
if __name__ == '__main__':  
    d=Database()
    d.create('fucc')
    print(d.showdatabases())
    d.dropdatabase('fucc')
    print(d.showdatabases())
    d.close()

表的创建和增删改查

表是数据库里面储存容器,数据基本上是储存到表里头,下面通过创建表操作对象去对表中的数据进行操作。

1.创建表

创建一个表,首先要连接到数据库,获取到当前的数据库db,然后输入sql指令来去创建表,sql 指令:create table if not exists 表名(……表结构……);

def connect(database_name):
    db = psql.connect(
        host='127.0.0.1',
        user='heweijie',
        password='heweijie',
        port=3306,
        database=database_name,
        charset='utf8'
    )
    return db #返回当前连接的数据库
def createtable(name):
    db=connect('test') #数据库名字为test
    cur=db.cursor()
    try:
        sql=f'create table if not exists {name}(id int primary key auto_increment,name char(50),num int);'
        print('创建成功')
    except Exception as e:
        print(e)
        db.rollback()

2.查看表结构

sql 指令是 :desc 表名;

#………………
def desctable(name): #表的名字为name
    db=connect('test')
    cur=db.cursor()
    sql=f'desc {name}'
    cur.execute(sql)
    print(cur.fetchall()) #输出全部结果

3.查看全部表

sql 指令: show tables;

#…………
def showtables():
    db=connect('test')
    cur=db.cursor()
    sql='show tables;'
    cur.execute(sql)
    print(cur.fetchall())

4.删除表

sql 指令:drop table 表名;

#………………
def droptable(name):
    db = connect('test')
    cur = db.cursor()
    try:
        sql = f'drop table {name};'
        cur.execute(sql)
        print('删除成功')
    except Exception as e:
        print(e)
        db.rollback()

5.面向对象写法

#创建表以及操作
class Table(object):
    def __init__(self,database_name):
        '''连接数据库database_name,自写'''
        self.db=psql.connect(
            host='127.0.0.1',
            user='heweijie',
            password='heweijie',
            port=3306,
            database=database_name,
            charset='utf8'
        )
        self.cur=self.db.cursor()
    def create(self,sql):
        '''创建表,sql语句自行写入'''
        try:
            self.cur.execute(sql)
            print('create successfully')
        except Exception as e:
            print(e)
            self.db.rollback()
    def desctable(self,table):
        '''查看表结构'''
        sql=fr'desc {table};'
        self.cur.execute(sql)
        result=self.cur.fetchall()
        print(result)
    def showtables(self):
        '''查看这个数据库里面的全部表'''
        sql=f'show tables;'
        self.cur.execute(sql)
        result=self.cur.fetchall()
        print(result)
    def droptable(self,name):
        '''把名字为name的表删除'''
        try:
            sql=f'drop table {name};'
            self.cur.execute(sql)
        except Exception as e:
            print(e)
            self.db.rollback()
    def insert(self,sql):
        '''插入数据,sql语句自写'''
        try:
            self.cur.execute(sql)
        except Exception as e:
            print(e)
            self.db.rollback()
    def selectdata(self,sql):
        '''查询数据,sql语句自写'''
        self.cur.execute(sql)
        result=self.cur.fetchall()
        print(result)
#使用示例
if __name__ == '__main__':
    user=Table('hello')
    user.create(r'create table if not exists mydatabase (id int primary key auto_increment,name char(50),num int);')
    user.showtables()
    user.desctable('mydatabase')
    user.selectdata('select *from user;')#user 是另外一个表
    user.droptable('mydatabase')
    user.showtables()

到此这篇关于使用Python实现Mysql数据库相关操作详解的文章就介绍到这了,更多相关Python操作Mysql数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中socket网络通信是干嘛的

    Python中socket网络通信是干嘛的

    在本篇文章里小编给大家分享的是关于Python中socket网络通信知识点内容,需要的朋友们可以跟着学习下。
    2020-05-05
  • PyCharm中使用jupyter实践

    PyCharm中使用jupyter实践

    该文介绍了在PyCharm中使用Jupyter创建.ipynb文件的过程,具体步骤包括安装Jupyter,以及在PyCharm中创建.ipynb文件等
    2026-05-05
  • Python入门之面向对象和类

    Python入门之面向对象和类

    这篇文章主要为大家介绍了Python面向对象和类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例

    Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例

    这篇文章主要介绍了Python基于递归和非递归算法求两个数最大公约数、最小公倍数,涉及Python递归算法、流程循环控制进行数值运算相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • 关于使用OpenCsv导入大数据量报错的问题

    关于使用OpenCsv导入大数据量报错的问题

    这篇文章主要介绍了使用OpenCsv导入大数据量报错的问题 ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Python批量删除或移动指定图像的实现示例

    Python批量删除或移动指定图像的实现示例

    本文主要介绍了Python批量删除或移动指定图像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python合并RepeatMasker预测结果中染色体的overlap区域

    python合并RepeatMasker预测结果中染色体的overlap区域

    这篇文章主要为大家介绍了python合并RepeatMasker预测结果中染色体的overlap区域实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server(问题及解决方案)

    Django部署到服务器后无法获取到静态元素 The requested resource

    写了一个Django项目,部署到云主机后,访问发现图片无法访问,报错The requested resource was not found on this server,下面给大家介绍Django部署到服务器后无法获取到静态元素The requested resource was not found on this server(问题及解决方案),需要的朋友可以参考下
    2024-02-02
  • python通配符之glob模块的使用详解

    python通配符之glob模块的使用详解

    这篇文章主要介绍了python通配符之glob模块的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详谈python http长连接客户端

    详谈python http长连接客户端

    下面小编就为大家带来一篇详谈python http长连接客户端。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论