1. 概述
1.1 前言
最近用Caffe跑自己的数据集,需要学习LMDB和LevelDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此。
1.2 环境
使用Ubuntu 14.04,Python 2.7.6。
2. SQLite
2.1 准备
SQLite是一种嵌入式数据库,它的数据库就是一个文件。Python 2.5x以上版本内置了SQLite3,使用时直接import sqlite3即可。
2.2 操作流程
概括地讲,操作SQLite的流程是:
通过sqlite3.open()创建与数据库文件的连接对象connection;
通过connection.cursor()创建光标对象cursor;
通过cursor.execute()执行SQL语句;
通过connection.commit()提交当前的事务,或者通过cursor.fetchall()获得查询结果;
通过connection.close()关闭与数据库文件的连接。
总结起来就是用cursor.execute()执行SQL语句,改变数据(插入、删除、修改)时用connection.commit()提交变更,查询数据时用cursor.fetchall()得到查询结果。
2.3 操作实例
2.3.1 建立数据库与建立表
直接来看例子:
![用Python操作数据库的最详细示例](https://www.elecfans.com/uploads/allimg/171229/1049533330-0.png)
这里conn是与数据库文件test.db的连接对象,c是conn的光标对象,通过c.execute()执行建表操作,创建了简单的学生信息表(学号,名字),通过conn.commit()提交,最后用conn.close()关闭连接。
conn.open()发现文件不存在时会自动创建,这里使用了文件“test.db”,也可以使用“:memory:”建立内存数据库。
2.3.2 插入、删除、修改
为了便于多次运行,直接使用了内存数据库:
![10495355I-1.png](https://www.elecfans.com/uploads/allimg/171229/10495355I-1.png)
做的事情还是非常简单易懂的,向学生信息表中插入(1,Alice)、(2,Bob)、(3,Peter)三条记录,删除(1,Alice),修改(3,Peter)为(3,Mark)。
“?”是sqlite3中的占位符,execute时会用第二个参数元组里的元素按顺序替换。官方文档里建议出于安全考虑,不要直接用python做字符串拼接。
另外注意不需要每次execute后调用commit。
2.3.3 查询
直接在上面的代码commit之后加上:
![10495354X-2.png](https://www.elecfans.com/uploads/allimg/171229/10495354X-2.png)
运行一下,输出结果为:
![用Python操作数据库的最详细示例](https://www.elecfans.com/uploads/allimg/171229/104953D24-3.png)
test_query.py
fetchall()返回的是记录数组,可以通过WHERE子句做更细致的选择。
2.3.4 完整的例子
把上面的操作写成函数形式:
![用Python操作数据库的最详细示例](https://www.elecfans.com/uploads/allimg/171229/104953N11-4.jpg)
运行一下,输出结果为:
![1049531F3-5.png](https://www.elecfans.com/uploads/allimg/171229/1049531F3-5.png)
test_sqlite.py
之后用的例子都是这个简单的学生信息表(学号,姓名)。
3. MySQL
3.1 准备
安装MySQL:
![104953JJ-6.png](https://www.elecfans.com/uploads/allimg/171229/104953JJ-6.png)
安装MySQLdb:
![1049535V9-7.png](https://www.elecfans.com/uploads/allimg/171229/1049535V9-7.png)
使用时import MySQLdb(注意大小写)。
3.2 操作流程
同为关系型数据库,MySQL的操作方法和SQLite是大同小异的。建立连接对象与光标对象,用execute()执行SQL语句,commi()提交事物,fetchall()获得查询结果。
3.3 操作实例
直接看MySQL版本的完整例子:
![用Python操作数据库的最详细示例](https://www.elecfans.com/uploads/allimg/171229/1049535202-8.jpg)
对比后可以发现区别仅是建立连接时参数复杂一些,同时需要用select_db()选择数据库。
运行一下,输出结果为:
![104953L94-9.png](https://www.elecfans.com/uploads/allimg/171229/104953L94-9.png)
test_mysql.py
4. LMDB
4.1 准备
学习LMDB的时候不禁想到知乎上的提问“有哪些名人长期生活在其他名人的光环下”,说实话感觉查它的人基本都是为了用Caffe……
Anyway,LMDB和SQLite/MySQL等关系型数据库不同,属于key-value数据库(把LMDB想成dict会比较容易理解),键key与值value都是字符串。
安装:
![1049535549-10.png](https://www.elecfans.com/uploads/allimg/171229/1049535549-10.png)
使用时import lmdb。
4.2 操作流程
概况地讲,操作LMDB的流程是:
通过env = lmdb.open()打开环境
通过txn = env.begin()建立事务
通过txn.put(key, value)进行插入和修改
通过txn.delete(key)进行删除
通过txn.get(key)进行查询
通过txn.cursor()进行遍历
通过txn.commit()提交更改
4.3 操作实例
4.3.1 建立环境
![104953FB-11.png](https://www.elecfans.com/uploads/allimg/171229/104953FB-11.png)
运行一下,查看当前目录的变化:
![104953O60-12.png](https://www.elecfans.com/uploads/allimg/171229/104953O60-12.png)
set_env.py
可以看到当前目录下多了students目录,里面有data.mdb和lock.mdb两个文件。
4.3.2 插入、删除、修改
插入与修改都用put实现,删除用delete实现。
![1049535560-13.png](https://www.elecfans.com/uploads/allimg/171229/1049535560-13.png)
注意用txn = env.begin()创建事务时,有write = True才能够写数据库。
4.3.3 查询
查单条记录用get(key),遍历数据库用cursor。
直接在上面的代码commit()之后加上:
![1049533E6-14.png](https://www.elecfans.com/uploads/allimg/171229/1049533E6-14.png)
运行一下,输出结果为:
![1049532248-15.png](https://www.elecfans.com/uploads/allimg/171229/1049532248-15.png)
test_query.py
注意上次commit()之后要用env.begin()更新txn。
4.3.4 完整的例子
![用Python操作数据库的最详细示例](https://www.elecfans.com/uploads/allimg/171229/1049535213-16.jpg)
运行一下,输出结果为:
![1049532514-17.png](https://www.elecfans.com/uploads/allimg/171229/1049532514-17.png)
test_lmdb.py
5. LevelDB
5.1 准备
同为key-value数据库,LevelDB的资料比LMDB丰富太多了。值得一提的是LevelDB实现时用到了SkipList,以后有机会要亲自实现一下。
安装:
![104953D51-18.png](https://www.elecfans.com/uploads/allimg/171229/104953D51-18.png)
使用时import leveldb。
5.2 操作流程
LevelDB操作时类似与LMDB,使用Put/Get/Delete,但是更加简单(不需要事务txn和commit提交),同时支持范围迭代器RangeIter。
5.3 操作实例
来看LevelDB版本的完整例子:
![用Python操作数据库的最详细示例](https://www.elecfans.com/uploads/allimg/171229/104953I28-19.jpg)
运行一下,输出结果为:
![104953LT-20.png](https://www.elecfans.com/uploads/allimg/171229/104953LT-20.png)
test_leveldb.py
此外,由于没有commit()操作,leveldb中用WriteBatch实现多条更改一次提交,直接copy示例代码如下:
![104953B06-21.png](https://www.elecfans.com/uploads/allimg/171229/104953B06-21.png)
6. 学习总结
这次学习四种数据库操作时,是按照SQLite -> MySQL -> LMDB -> LevelDB的顺序,所以研究SQLite与LMDB花了较长时间,而MySQL与LevelDB很快就搞定了。某种意义上,学习技术和背单词一样,当前掌握的单词越多,背新单词就越容易——因为可以把新单词和已经掌握的同义词联系在一起,在脑海里聚成簇。
最后回顾一下,SQLite与MySQL都是关系型数据库,操作时创建连接对象connection与光标对象cursor,通过execute执行SQL语句,commit提交变更,fetch得到查询结果;LMDB与LevelDB都是K-V数据库,操作时建立与数据库的连接,用put/delete改变数据,用get获取数据,区别是LMDB中有事务需要commit,LevelDB不需要。
原文标题:Python操作SQLite/MySQL/LMDB/LevelDB
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
收藏
人收藏
扫一扫,分享给好友
复制链接分享
评论
发布评论请先 登录
相关推荐
python花式导包的八种方法
python花式导包的八种方法1. 直接 import人尽皆知的方法,直接导入即可
[code]>>> import os
>>> os.getcwd()
'/home/xxx'[/c...
发表于 03-10 16:51 •
247次
阅读
python花式导包的八种方法
python花式导包的八种方法 1. 直接 import 人尽皆知的方法,直接导入即可 import....
python爬虫知识分享 发表于 03-10 16:48 •
98次
阅读
python安装第三方包的八种方法
python安装第三方包的八种方法1. 使用 easy_installeasy_install 这应该是最古老的包安装方式了,目前基本没有人使用了。下面是 ...
发表于 03-10 16:29 •
434次
阅读
python安装第三方包的八种方法
python安装第三方包的八种方法 1. 使用 easy_install easy_install ....
python爬虫知识分享 发表于 03-10 16:27 •
88次
阅读
今天咱们用Python整一个超级玛丽游戏 | 附带源码
开发环境Python版本:3.7.8相关模块:requests模块;tqdm模块;pyfreeproxy模块;pyecharts模块;以及一些python自带的模块。...
发表于 03-10 14:26 •
222次
阅读
如何在RK3288上安装Opencv?
如何在RK3288上安装Opencv?
发表于 03-10 06:49 •
38次
阅读
如何才能在RV1109平台上编写基于USB Camera的demo程序?
如何才能在RV1109平台上编写基于USB Camera的demo程序?...
发表于 03-10 06:15 •
42次
阅读
什么是python包、模块和库?
1. 模块以 .py 为后缀的文件,我们称之为 模块,英文名 Module。
模块让你能够有逻辑地组织你的 Python 代码段,把相关的代码...
发表于 03-09 16:48 •
405次
阅读
python包、模块和库是什么
1. 模块 以 .py 为后缀的文件,我们称之为 模块,英文名 Module。 模块让你能够有逻辑地....
python爬虫知识分享 发表于 03-09 16:47 •
143次
阅读
python类的多态和类的property属性
python类的多态多态,是指在同一类型下的不同形态。
比如下面这段代码
[code]class People:
def speak(self):...
发表于 03-09 16:38 •
431次
阅读
python类的多态和类的property属性
python类的多态 多态,是指在同一类型下的不同形态。 比如下面这段代码 class People....
python爬虫知识分享 发表于 03-09 16:37 •
127次
阅读
用Python学习科学编程
用Python学习科学编程,Python经典教材。
发表于 03-09 15:00 •
6次
阅读
怎样在debian下安装python3+pymssql呢
怎样在debian下安装python3+pymssql呢?有哪些安装步骤?...
发表于 03-09 06:32 •
59次
阅读
RK3308-CC-PLUS板子启用ROS模块后交叉编译,menuconfig中没有ROS选项怎么解决?
RK3308-CC-PLUS板子启用ROS模块后交叉编译,menuconfig中没有ROS选项怎么解决?...
发表于 03-09 06:23 •
36次
阅读
python类的继承
python类的继承类的继承,跟人类繁衍的关系相似。
被继承的类称为基类(也叫做父类),继承而得的类叫派生类(也叫子类),这种...
发表于 03-08 16:40 •
1096次
阅读
python类的继承详解
python类的继承 类的继承,跟人类繁衍的关系相似。 被继承的类称为基类(也叫做父类),继承而得的....
python爬虫知识分享 发表于 03-08 16:40 •
297次
阅读
python私有变量和私有方法
python私有变量和私有方法 1. 下划线妙用 在 Python 中,下划线可是非常推荐使用的符号....
python爬虫知识分享 发表于 03-08 16:30 •
343次
阅读
python静态方法与类方法
python静态方法与类方法 1. 写法上的差异 类的方法可以分为: 静态方法:有 staticme....
python爬虫知识分享 发表于 03-07 16:56 •
366次
阅读
python类的理解与使用
python类的理解与使用 1. 通俗理解类 类(英文名 class),是具有相同特性(属性)和行为....
python爬虫知识分享 发表于 03-07 16:51 •
354次
阅读
python如何捕获异常和主动抛出异常
python如何主动抛出异常和捕获异常 1. 如何抛出异常? 异常的产生有两种来源: 一种是程序自动....
python爬虫知识分享 发表于 03-04 17:09 •
638次
阅读
Python中有哪些常见的错误和异常
python常见异常类型 在程序运行过程中,总会遇到各种各样的问题和错误。 有些错误是我们编写代码时....
python爬虫知识分享 发表于 03-04 16:58 •
643次
阅读
python变量的作用域
python变量的作用域 1. 作用域 Python的作用域可以分为四种: L (Local) 局部....
python爬虫知识分享 发表于 03-03 16:50 •
379次
阅读
python偏函数和泛型函数详解
python偏函数 假如一个函数定义了多个位置参数,那你每次调用时,都需要把这些个参数一个一个地传递....
python爬虫知识分享 发表于 03-03 16:43 •
385次
阅读
python高阶函数详解
python高阶函数 1. map 函数 map 函数,它接收两个参数,第一个参数是一个函数对象(当....
python爬虫知识分享 发表于 03-02 16:47 •
163次
阅读
python匿名函数的使用
python匿名函数的使用 匿名函数(英语:anonymous function)是指一类无需定义标....
python爬虫知识分享 发表于 03-02 16:42 •
156次
阅读
11个案例讲解python函数参数
函数,在定义的时候,可以有参数的,也可以没有参数。
python爬虫知识分享 发表于 03-01 16:39 •
219次
阅读
详解python普通函数创建与调用
函数是一种仅在调用时运行的代码块。您可以将数据(称为参数)传递到函数中,然后由函数可以把数据作为结果....
python爬虫知识分享 发表于 03-01 16:32 •
216次
阅读
python推导式是什么
python推导式 推导式(英文名:comprehensions),也叫解析式,是Python的一种....
python爬虫知识分享 发表于 02-28 17:13 •
179次
阅读
python while循环详解
python while循环 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处....
python爬虫知识分享 发表于 02-28 16:39 •
157次
阅读
《深入Python3》中文版pdf
《深入Python3》中文版pdf
发表于 02-28 09:45 •
22次
阅读
《Dive Into Python》中文翻译版.pdf
《Dive Into Python》中文翻译版.pdf
发表于 02-25 17:22 •
23次
阅读
python for循环的案例说明
python for循环 for 循环可以遍历任何序列的项目,如一个列表或者一个字符串。 它的基本语....
python爬虫知识分享 发表于 02-25 16:27 •
203次
阅读
python判断语句的详细说明
python判断语句:if 1. 简单小例子 如果满足条件 A,则执行代码块 a,否则执行代码块 b....
python爬虫知识分享 发表于 02-25 16:22 •
208次
阅读
python生成器是什么
python生成器 1. 什么是生成器? 生成器(英文名 Generator ),是一个可以像迭代器....
python爬虫知识分享 发表于 02-24 15:53 •
219次
阅读
python迭代器详解
python迭代器 1. 可迭代对象 可以利用 for 循环的对象,都叫可迭代对象。 列表、元组、字....
python爬虫知识分享 发表于 02-24 15:42 •
189次
阅读
初学者学Python必看的几个练手小项目
Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python....
叶枫架构师 发表于 02-23 17:06 •
279次
阅读
4个Python经典项目实战,练手必备!
Python是一种极具可读性和通用性的编程语言。Python这个名字的灵感来自于英国喜剧团体Mont....
叶枫架构师 发表于 02-23 17:06 •
261次
阅读
python集合是什么
python集合 集合(英文名 set),它是一个无序的不重复元素序列。 这里面有两个重点: 无序,....
python爬虫知识分享 发表于 02-23 17:01 •
250次
阅读
python字典是什么
python字典 字典(英文名 dict),它是由一系列的键值(key-value)对组合而成的数据....
python爬虫知识分享 发表于 02-23 16:54 •
222次
阅读
python元组的详细介绍
python元组 元组(英文名 tuple),和列表非常的相似,它也是由一系列元素按顺序进行排列而成....
python爬虫知识分享 发表于 02-22 15:19 •
144次
阅读
python列表的详细介绍
python列表 列表(英文名 list),是由一系列元素按顺序进行排列而成的容器。 这里面有两个重....
python爬虫知识分享 发表于 02-22 15:14 •
151次
阅读
python cookbook(第三版)免费下载
python cookbook(第三版)免费下载。
发表于 02-22 13:57 •
43次
阅读
python运算符是什么
python运算符 0. 什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 +....
python爬虫知识分享 发表于 02-21 16:44 •
185次
阅读
python字符串格式化
python字符串格式化 格式化输出,主要有三种方式 使用 % 进行格式化 使用 format 函数....
python爬虫知识分享 发表于 02-21 16:28 •
165次
阅读
python输入与输出详解
python输入与输出 无论是从我们一开始的“hello world”,还是前面章节的里各种例子,基....
python爬虫知识分享 发表于 02-21 16:18 •
205次
阅读
python布尔值是什么
python布尔值 1. 什么是布尔值 但在Python语言中,布尔类型只有两个值 True :表示....
python爬虫知识分享 发表于 02-21 16:10 •
176次
阅读
python整数与浮点数分解
2.3 python整数与浮点数 Python 支持的数字类型有三种:整数、浮点数和复数。 1. 整....
python爬虫知识分享 发表于 02-18 09:09 •
271次
阅读
2.2 python字符串类型
2.2 python字符串类型 1. 如何定义字符串? 字符串是Python中最常用的数据类型之一。....
python爬虫知识分享 发表于 02-17 17:08 •
175次
阅读
深入了解python常量与变量
Python 的变量和常量不需要事先声明类型,这是根据Python的动态语言特性而来。
python爬虫知识分享 发表于 02-16 18:22 •
330次
阅读
解析两种运行Python程序方法
首先打开你的终端,直接输入 python3 回车,然后输入 print("Hello, World"....
python爬虫知识分享 发表于 02-16 18:17 •
412次
阅读
1.2 Python 开发环境的搭建
1.2 Python 开发环境的搭建 理论上只需要你安装了 CPython 解释器后,就可以开始写 ....
python爬虫知识分享 发表于 02-15 17:16 •
302次
阅读
快速安装 Python 解释器
1.1【环境】快速安装 Python 解释器 Python 是一门解释性脚本语言,因此要想让你编写的....
python爬虫知识分享 发表于 02-15 16:57 •
524次
阅读
MySQL端口可以从MySQL数据库中存储和检索数据
MySQL端口可以从MySQL数据库中存储和检索数据。 概览 建立连接后,端口读取数据库中存在的表/....
EDI电子数据交换 发表于 02-15 14:07 •
253次
阅读
《Python编程入门》.pdf
《Python编程入门》.pdf
发表于 02-11 16:03 •
114次
阅读
python获取历届春晚数据
不知道今年的春晚大家看了吗?小编表示没有看,而且是已经很多年没有完整的看过春晚了,关于看春晚的热情都....
yiniuyun 发表于 02-07 17:52 •
304次
阅读
Python语言主要有哪些特点及Python图形界面框架推荐
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做AB....
Les 发表于 01-30 16:44 •
247次
阅读
PikaScript入选2021年度Gitee最有价值开源项目
PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,....
RTThread物联网操作系统 发表于 01-26 15:59 •
571次
阅读
MySQL超级复杂?分享几个使用技巧
MySQL是最知名的关系数据库管理系统,作为LAMP Web开发平台,此开源解决方案在全球广受欢迎。....
发表于 01-19 16:53 •
59次
阅读
入坑ESP32,首次MicroPython项目移植
原先一直在ARM架构下编写Cpython,先来说说ARM架构优缺点:1、系统资源足够,虽然pytho....
发表于 01-18 11:24 •
66次
阅读
树莓派3B+使用STM32扩展板实现按键驱动
前几天入了个树莓派3B+,之前用过树莓派zero W觉得很方便,但是外围接口少了点。准备用3B+做个....
发表于 01-18 11:05 •
57次
阅读
|