Python数据库编程之pymysql详解

 更新时间:2023年05月05日 10:07:31   作者:我爱让机器学习  
本文主要介绍了Python数据库编程中pymysql,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Python数据库编程之pymysql

学习之前务必安装MySQL并已启动相关服务。

一、pymsql的安装

在python3的环境中直接使用以下命令即可:

pip install pymysql
#或者
pip3 install pymysql

安装完毕后可使用以下命令查看:

pip list | grep PyMySQL 
#注意大小写

结果如下:

二、连接数据库

pymysql连接数据库使用的是 pymsql.connect() 函数,其常用参数如下:

参数说明
dsn数据源名称,给出该参数表示数据库依赖
host=None数据库连接地址
user=None数据库用户名
password=‘’数据库用户密码
database=None要连接的数据库名称
port=3306端口号,默认为3306
charset=‘’要连接的数据库的字符编码(可以在终端登陆mysql后使用 \s 查看,如下图)
connect_timeout=10连接数据库的超时时间,默认为10
port=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) #获取指定条数的数据,不写默认为1
print('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端口号,默认为3306
charset=‘’要连接的数据库的字符编码(可以在终端登陆mysql后使用 \s 查看,如下图)
connect_timeout=10连接数据库的超时时间,默认为10
port=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()获取的行数,默认为1
setinputsizes(size)设置调用execute*()方法时分配的内存区域大小
setoutputsizes(size)设置列缓冲区大小,对大数据列尤其有用

以上就是Python数据库编程之pymysql详解的详细内容,更多关于Python pymysql的资料请关注脚本之家其它相关文章!

相关文章

  • tensorflow实现简单的卷积神经网络

    tensorflow实现简单的卷积神经网络

    这篇文章主要为大家详细介绍了tensorflow实现简单的卷积神经网络,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python异步执行CMD命令的具体实现

    Python异步执行CMD命令的具体实现

    异步执行CMD命令是提高Python程序性能的有效方法,本文就来介绍一下Python异步执行CMD命令的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Python 多线程Threading初学教程

    Python 多线程Threading初学教程

    多线程可简单理解为同时执行多个任务。本文给大家分享Python 多线程Threading初学教程实例详解,感兴趣的朋友一起学习吧
    2017-08-08
  • 基于Python搭建人脸识别考勤系统

    基于Python搭建人脸识别考勤系统

    人脸识别目前正被用于让世界更安全、更智能、更方便。在本文中,你将学习如何使用 Python 构建人脸识别系统。人脸识别比人脸检测更进一步。感兴趣的可以学习一下
    2021-12-12
  • Python记录详细调用堆栈日志的方法

    Python记录详细调用堆栈日志的方法

    这篇文章主要介绍了Python记录详细调用堆栈日志的方法,涉及Python调用堆栈日志的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • Python竟能画这么漂亮的花,帅呆了(代码分享)

    Python竟能画这么漂亮的花,帅呆了(代码分享)

    这篇文章主要介绍了用Python作图的一个简单实例,通过turtle模块实现作图,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • sklearn中make_blobs的用法详情

    sklearn中make_blobs的用法详情

    这篇文章主要介绍了sklearn中make_blobs的用法详情,sklearn中的make_blobs函数主要是为了生成数据集的,下面文章的学习内容,需要的小伙伴可以参考一下
    2022-01-01
  • Python编程中实现迭代器的一些技巧小结

    Python编程中实现迭代器的一些技巧小结

    只谈迭代器的话在Python中只是一个泛指的概念,具体的可以用yield、生成器表达式、iter等多种方式来构建,这里我们整理了Python编程中实现迭代器的一些技巧小结:
    2016-06-06
  • 对python pandas中 inplace 参数的理解

    对python pandas中 inplace 参数的理解

    这篇文章主要介绍了对python pandas中 inplace 参数的理解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 10款最佳Python开发工具推荐,每一款都是神器

    10款最佳Python开发工具推荐,每一款都是神器

    这篇文章主要介绍了10款最佳Python开发工具推荐,每一款都是神器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-10-10

最新评论