Python进阶-----操作mysql数据库

目录

前言:

安装pymysql

测试连接数据库

导入模块

测试连接查询操作

返回结果fecthone、fecthmany、fecthall

创建和管理数据库

表的创建和增删改查

1.创建表

 2.查看表结构

 3.查看全部表

4.删除表

5.面向对象写法 


前言:

        前面学习了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()

以上就是今天的内容了,我们下一期再见!

 分享一张壁纸:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fitz&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值