目录
前言:
安装pymysql
测试连接数据库
导入模块
测试连接查询操作
返回结果fecthone、fecthmany、fecthall
创建和管理数据库
表的创建和增删改查
1.创建表
2.查看表结构
3.查看全部表
4.删除表
5.面向对象写法
前面学习了MySQL的基础语句,就有人会问,那怎么去通过编程语言来操作mysql数据库呢,这总不能只能用sql指令来去操作吧?答案是肯定可以通过编程语言去操作的,只是sql指令是操作数据库的基础指令,编程语言只是其辅助作用的,把数据库与其他程序进行结合。那这一期我就来讲解怎么去通过Python去连接MySQL数据库,同时实现数据库等相关操作
什么是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 | 数据源名称,给出该参数表示数据库依赖 |
当我们去执行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()
表是数据库里面储存容器,数据基本上是储存到表里头,下面通过创建表操作对象去对表中的数据进行操作。
创建一个表,首先要连接到数据库,获取到当前的数据库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()
sql 指令是 :desc 表名;
#………………
def desctable(name): #表的名字为name
db=connect('test')
cur=db.cursor()
sql=f'desc {name}'
cur.execute(sql)
print(cur.fetchall()) #输出全部结果
sql 指令: show tables;
#…………
def showtables():
db=connect('test')
cur=db.cursor()
sql='show tables;'
cur.execute(sql)
print(cur.fetchall())
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()
#创建表以及操作
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()
以上就是今天的内容了,我们下一期再见!
分享一张壁纸: