文章目录
前言
学习之前务必安装MySQL并已启动相关服务,MySQL安装方法及查看初始密码见下面链接文章的第一部分:
https://blog.csdn.net/youngwyj/article/details/124293362?spm=1001.2014.3001.5502
一、pymsql的安装
在python3的环境中直接使用以下命令即可:
pip install pymsql
#或者
pip3 install pymysql
安装完毕后可使用以下命令查看:
pip list | grep PyMySQL
#注意大小写
结果如下:
二、连接数据库
pymysql连接数据库使用的是 pymsql.connect() 函数,其常用参数如下:
参数说明dsn数据源名称,给出该参数表示数据库依赖host=None数据库连接地址user=None数据库用户名password=‘’数据库用户密码database=None要连接的数据库名称port=3306端口号,默认为3306charset=‘’要连接的数据库的字符编码(可以在终端登陆mysql后使用 \s 查看,如下图)connect_timeout=10连接数据库的超时时间,默认为10port=3306端口号,默认为3306
连接完数据库后,需要创建一个游标对象,模块会通过游标对象来执行sql语句以及获取查询结果,接下来直接通过代码展示各方法。
示例:
import pymysql
db = pymysql.connect(
host="localhost",
port=3306,
user='root',#在这里输入用户名
password='888888',#在这里输入密码
charset='utf8mb4')#连接数据库
cursor = db.cursor()#创建游标对象
sql ='show databases'#sql语句
cursor.execute(sql)#执行sql语句
one = cursor.fetchone()#获取一条数据print('one:',one)
many = cursor.fetchmany(3)#获取指定条数的数据,不写默认为1print('many:',many)all= cursor.fetchall()#获取全部数据print('all:',all)
cursor.close()
db.close()#关闭数据库的连接
运行结果:
one: ('coldbox',)
many: (('coldboxtest',),('db_student',),('information_schema',))
all: (('mysql',),('performance_schema',),('sys',),('test',),('wan',))
从结果可以看出,fetchone(),fetchmany(size),fetchall() 三个函数返回值都是元组,但是fetchone()返回的是单个元组,另外两个返回的都是元组的嵌套。
三、创建和管理数据库
使用游标对象来执行创建和删除数据库的sql语句示例:
import pymysql
db = pymysql.connect(
host="localhost",
port=3306,
user='root',#在这里输入用户名
password='888888',#在这里输入密码
charset='utf8mb4')
cursor = db.cursor()#创建游标对象try:
sql ='show databases'
cursor.execute(sql)print('未创建数据库前:',cursor.fetchall())#获取创建数据库前全部数据库
dbname ='justtest'
sql ='create database if not exists %s'%(dbname)#创建数据库
cursor.execute(sql)
sql ='show databases'
cursor.execute(sql)print('创建新的数据库后:',cursor.fetchall())#获取创建数据库后全部数据库
sql ='drop database if exists %s'%(dbname)#删除数据库
cursor.execute(sql)
sql ='show databases'
cursor.execute(sql)print('删除新的数据库后:',cursor.fetchall())#获取删除数据库后全部数据库except Exception as e:print(e)
db.rollback()#回滚事务finally:
cursor.close()
db.close()#关闭数据库连接
运行结果:
未创建数据库前: (('coldbox',),('coldboxtest',),('db_student',),('information_schema',),('mysql',),('performance_schema',),('sys',),('test',),('wan',))
创建新的数据库后: (('coldbox',),('coldboxtest',),('db_student',),('information_schema',),('justtest',),('mysql',),('performance_schema',),('sys',),('test',),('wan',))
删除新的数据库后: (('coldbox',),('coldboxtest',),('db_student',),('information_schema',),('mysql',),('performance_schema',),('sys',),('test',),('wan',))
四、创建和管理表
使用游标对象来执行创建和管理表的sql语句示例:
import pymysql
db = pymysql.connect(
host="localhost",
port=3306,
user='root',#在这里输入用户名
password='888888',#在这里输入密码
charset='utf8mb4',
database='justtest'#指定操作的数据库)
cursor = db.cursor()#创建游标对象try:
tableName ='user'
sql ='create table %s (id varchar(20) not null, name varchar(20) not null, primary key(id))'%(tableName)
cursor.execute(sql)#执行sql语句,创建表
sql ='show tables'
cursor.execute(sql)print('显示创建的表:',cursor.fetchall())#显示创建的表
sql ='desc %s'%(tableName)
cursor.execute(sql)print('显示表结构:',cursor.fetchall())#显示表结构except Exception as e:print(e)
db.rollback()#回滚事务finally:
cursor.close()
db.close()#关闭数据库连接
运行结果:
显示创建的表: (('user',),)
显示表结构: (('id','varchar(20)','NO','PRI', None,''),('name','varchar(20)','NO','', None,''))
总结
对于修改表结构,插入,查询,删除数据等操作,与上面的操作大体一样,主要是对 sql 语句的编写,此处不做赘述。
整体过程:
连接数据库 -> 创建游标对象 -> 编写sql语句 -> 执行sql语句 -> 获取结果 -> 关闭数据库连接
connect() 函数常用参数:
参数说明dsn数据源名称,给出该参数表示数据库依赖host=None数据库连接地址user=None数据库用户名password=‘’数据库用户密码database=None要连接的数据库名称port=3306端口号,默认为3306charset=‘’要连接的数据库的字符编码(可以在终端登陆mysql后使用 \s 查看,如下图)connect_timeout=10连接数据库的超时时间,默认为10port=3306端口号,默认为3306
connect() 函数返回的连接对象的方法总结:
方法名说明close()关闭数据库的连接commit()提交事务rollback()回滚事务cursor()获取游标对象,操作数据库,如执行DML操作,调用存储过程等
游标对象的方法:
方法名说明callproc(procname,[,parameters])调用存储过程,需要数据库支持close()关闭当前游标execute(operation,[,parameters])执行数据库操作,sql语句或者数据库命令executemany(operation, seq_of_params)用于批量操作fetchone()获取查询结果集合中的下一条记录fetchmany(size)获取指定数量的记录fetchall()获取查询结果集合所有记录nextset()跳至下一个可用的数据集arraysize指定使用fetchmany()获取的行数,默认为1setinputsizes(size)设置调用execute*()方法时分配的内存区域大小setoutputsizes(size)设置列缓冲区大小,对大数据列尤其有用
版权归原作者 我爱让机器学习 所有, 如有侵权,请联系我们删除。