资讯专栏INFORMATION COLUMN

python 数据库编程,这篇是针对 mysql 的,滚雪球学Python第4季第13篇

xiaowugui666 / 1580人阅读

摘要:的安装博客补充知识年最新安装教程,滚雪球学第四季。操作操作数据库一般被程序员成为操作增删改查,其中各个字符分别代表新增,读取,更新,删除。可以返回受影响行数,可以直接通过该值判断是否修改成功。

在第一季滚雪球学 python 中,我们已经接触了 python 操作 sqlite,本篇博客为你介绍 python 与 mysql 和 nosql 之间的故事。

在正式学习之前,先确保你电脑上已经安装了 mysql 。

mysql 的安装博客:补充知识:2021 年 mysql 最新 windows 安装教程,滚雪球学 python 第四季

mysql 一些简单命令

对于 mysql 的细致学习,咱们应该多带带开一个系列,这个 flag 先立下了,本文为了学习 python 操作 mysql 数据库,只能先做一些基本铺垫。

查看所有数据库

show databases;

查看帮助

help

退出 mysql

exit

创建数据库

create database cadb;

删除数据库

drop database cadb;

使用某个数据库

use cadb;

查看库表

show tables;

查看表结构

desc 表名;

除了上述内容外,你还要学习建表语句,删表语句,表中插入数据语句,表删除数据语句,表更新数据语句,这些稍后在 python 操作 mysql 中进行实现。

python 操作 mysql

操作数据库一般被程序员成为 CRUD 操作(增删改查),其中各个字符分别代表 C(Create) 新增,R(Read) 读取,U(Update) 更新,D(Delete) 删除。

在 python3 中推荐使用 pymysql 模块操作数据库,模块使用命令 pip install PyMySQL 进行安装。

在此之前,先通过 MySQL Command Line Client 创建一个表用来做测试。

新建库,新建表,插入数据 命令依次如下

show databases;create database cadb;use cadb;-- 建表语句create table user(name varchar(10),uid int,primary key(uid));desc user;


接下来在表中插入 2 条数据。

insert into user(name,uid) values ("橡皮擦",1);insert into user(name,uid) values ("CSDN",2);

简单的查询 sql 如下所示:

select * from user;


下面就可以在 python 中编写操作该库表的相关代码了,数据库链接步骤如下:

  1. 连接数据库,生成连接对象;
  2. 创建游标对象,用于访问数据表;
  3. 执行 sql 语句;
  4. 关闭游标;
  5. 关闭连接。

python 查询数据
python 连接数据库获取数据

import pymysql# python 连接数据库,返回数据库连接对象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")print(conn)

输出连接对象如下所示:

<pymysql.connections.Connection object at 0x00000000021E2F60>

其中 connect 方法相关的参数可以依据名称进行判断。

接下来就是创建游标,提取数据。

# 通过 cursor() 创建游标对象,并让查询结果以字典格式输出cur = conn.cursor(cursor=pymysql.cursors.DictCursor)# 输出 

下一步使用游标对象 curexecute 方法执行 sql

cur.execute("select * from user")

最后通过相关方法获取查询结果,本案例获取所有用户使用 fetchall 方法。

# 获取查询结果data = cur.fetchall()

输入数据库检索的所有数据。

[{"name": "橡皮擦", "uid": 1}, {"name": "CSDN", "uid": 2}]

关闭游标,关闭连接

# 关闭游标cur.close()# 关闭数据库连接conn.close()

接下来我们将其修改的复杂一些,检索特定数据,例如 uid=1 的数据,并且用到上下文管理器 with 进行对象的关闭。

第一种写法

import pymysql# python 连接数据库,返回数据库连接对象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    cur.execute("select * from user where uid = %s", 1)    # 获取查询结果    data = cur.fetchall()    print(data)# 关闭数据库连接conn.close()

第二种写法

import pymysql# python 连接数据库,返回数据库连接对象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    cur.execute("select * from user where uid = %(uid)s", {"uid": 1})    # 获取查询结果    data = cur.fetchall()    print(data)# 关闭数据库连接conn.close()

两种写法,在 execute 方法参数存在差异,可直接对比学习。

python 更新数据表数据
接下来演示的是使用 python 去更新表数据,例如将 uid = 2name 列更新为 Code

import pymysql# python 连接数据库,返回数据库连接对象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    try:        cur.execute("update user set name =%s where uid = %s", ["Code", 2])        conn.commit()  # 提交事务    except Exception as e:        print("数据更新异常", e)        conn.rollback()  # 数据回滚# 关闭数据库连接conn.close()

上述代码核心为在执行 SQL 操作之后,需要使用事务处理,即 conn.commit 提交事务,确保当前修改生效,如果出现异常,还需要使用 conn.rollback 对提交事务进行回滚。

cursor. execute 可以返回受影响行数,可以直接通过该值判断是否修改成功。

本次代码还使用了 try-except 语句,对于 PyMySQL 模块内置的异常类,清单如下:

  • StandardError
    • Warning
    • Error
      • InterfaceError
      • DatabaseError
        • DataError
        • OperationalError
        • IntegrityError
        • ProgrammingError
        • NotSupportedError

python 新增数据表数据
接下来演示增加数据,本次插入数据都采用硬编码,如果想创建一个自动递增的表字段,需要继续研究 sql 相关写法。

import pymysql# python 连接数据库,返回数据库连接对象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    try:        affected = cur.execute("insert into user(name,uid) values (%s,%s)", ["Good", 3])        conn.commit()  # 提交事务        print("受影响行数", affected)    except Exception as e:        print("数据插入异常", e)        conn.rollback()  # 数据回滚# 关闭数据库连接conn.close()

python 删除表格数据
核心代码如下所示:

affected = cur.execute("delete from user where uid = %s", [3])conn.commit()  # 提交事务print("受影响行数", affected)

写到这里,你可以自行完成一个 python 简单的数据库操作封装。

python 操作 nosql 之 dbm

mysql 数据关系型数据库,与之对应的就是非关系型数据库,例如 python 内置的 dbm(database manager )

第一个要学习的方法是 dbm.open,方法原型如下所示:

def open(file, flag="r", mode=0o666):

flag 参数:

  • r : 只读;
  • w : 只写;
  • n : 总是创建一个数据库,打开方式为读写;
  • c : 存在不创建,不存在则创建。

关闭数据库使用 dbm.close(),使用 with 语句之后,不需要手动释放资源。

with dbm.open(xxx) as db:	pass

dbm 存储的形式类似 python 字典,以键值对形式存在。

import dbmwith dbm.open("example.db", "n") as db:    db["name"] = "橡皮擦" # 存储值    db["age"] = "18" # values must be bytes or strings

读取值使用 db[key] 即可,如果没有 key 值,提示 KeyError 错误。

import dbmwith dbm.open("example.db", "r") as db:    ca = db["name"]    age = db["age"]    print(ca)

dbm 数据库保存的数据是字符串类型或者字节序列类型,读取到的值是字节序列类型,需要使用解码函数 decode 转换成字符串。

写在后面

以上内容就是本文的全部内容,希望对学习路上的你有所帮助~

今天是持续写作的第 230 / 365 天。
期待 关注点赞评论收藏

更多精彩

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121550.html

相关文章

  • #yyds干货盘点# 3. 无转折不编程雪球 Python

    摘要:在流程控制中,你将同步学到关系运算符与逻辑运算符。关系运算符在中关系运算符其实就是比大小的概念,所以要学习的就是大于小于等于等内容。逻辑运算符逻辑运算符在中有个,分别是。含有逻辑运算符的式子,最终返回的结果也是布尔值。 滚雪球学 Python,目标就是让 Python 学起来之后,越滚越大。三、无转折不编程如果...

    xuexiangjys 评论0 收藏0
  • 博客和你唠唠 python 并发,雪球python四季,16

    摘要:图片下载属于操作,比较耗时,基于此,可以利用中的多线程将其实现。更多精彩滚雪球学完结滚雪球学第二轮完结滚雪球学第三轮滚雪球学番外篇完结 在 python 编码过程中...

    qpwoeiru96 评论0 收藏0
  • 1. 雪球Python四季开启,一需三吃,Python 函数式编程初识,面向过程,面向对象,函

    摘要:看起来好像是废话,它还有一个补充的说明,在函数式编程中要避免状态变化和使用可变对象。函数式编程的特点在中,函数即对象,例如声明一个函数之后,你可以调用其属性。 ...

    huaixiaoz 评论0 收藏0
  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0
  • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<