0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Python操作数据库的最详细示例

马哥Linux运维 2017-12-29 10:45 次阅读

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操作数据库的最详细示例

这里conn是与数据库文件test.db的连接对象,c是conn的光标对象,通过c.execute()执行建表操作,创建了简单的学生信息表(学号,名字),通过conn.commit()提交,最后用conn.close()关闭连接。

conn.open()发现文件不存在时会自动创建,这里使用了文件“test.db”,也可以使用“:memory:”建立内存数据库。

2.3.2 插入、删除、修改

为了便于多次运行,直接使用了内存数据库:

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

运行一下,输出结果为:

用Python操作数据库的最详细示例

test_query.py

fetchall()返回的是记录数组,可以通过WHERE子句做更细致的选择。

2.3.4 完整的例子

把上面的操作写成函数形式:

用Python操作数据库的最详细示例

运行一下,输出结果为:

1049531F3-5.png

test_sqlite.py

之后用的例子都是这个简单的学生信息表(学号,姓名)。

3. MySQL

3.1 准备

安装MySQL:

104953JJ-6.png

安装MySQLdb:

1049535V9-7.png

使用时import MySQLdb(注意大小写)。

3.2 操作流程

同为关系型数据库,MySQL的操作方法和SQLite是大同小异的。建立连接对象与光标对象,用execute()执行SQL语句,commi()提交事物,fetchall()获得查询结果。

3.3 操作实例

直接看MySQL版本的完整例子:

用Python操作数据库的最详细示例

对比后可以发现区别仅是建立连接时参数复杂一些,同时需要用select_db()选择数据库。

运行一下,输出结果为:

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

使用时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

运行一下,查看当前目录的变化:

104953O60-12.png

set_env.py

可以看到当前目录下多了students目录,里面有data.mdb和lock.mdb两个文件。

4.3.2 插入、删除、修改

插入与修改都用put实现,删除用delete实现。

1049535560-13.png

注意用txn = env.begin()创建事务时,有write = True才能够写数据库。

4.3.3 查询

查单条记录用get(key),遍历数据库用cursor。

直接在上面的代码commit()之后加上:

1049533E6-14.png

运行一下,输出结果为:

1049532248-15.png

test_query.py

注意上次commit()之后要用env.begin()更新txn。

4.3.4 完整的例子

用Python操作数据库的最详细示例

运行一下,输出结果为:

1049532514-17.png

test_lmdb.py

5. LevelDB

5.1 准备

同为key-value数据库,LevelDB的资料比LMDB丰富太多了。值得一提的是LevelDB实现时用到了SkipList,以后有机会要亲自实现一下。

安装:

104953D51-18.png

使用时import leveldb。

5.2 操作流程

LevelDB操作时类似与LMDB,使用Put/Get/Delete,但是更加简单(不需要事务txn和commit提交),同时支持范围迭代器RangeIter。

5.3 操作实例

来看LevelDB版本的完整例子:

用Python操作数据库的最详细示例

运行一下,输出结果为:

104953LT-20.png

test_leveldb.py

此外,由于没有commit()操作,leveldb中用WriteBatch实现多条更改一次提交,直接copy示例代码如下:

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不需要。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MySQL
    +关注

    关注

    1

    文章

    776

    浏览量

    26019
  • SQlite
    +关注

    关注

    0

    文章

    78

    浏览量

    15776
  • python
    +关注

    关注

    52

    文章

    4680

    浏览量

    83497

原文标题:Python操作SQLite/MySQL/LMDB/LevelDB

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用ADO操作数据库

    使用ADO操作数据库要运行程序必须将数据库文件demo.mdb与可执行文件放在一起,如果在vc开发环境中运行,则需要将该数据库文件放在工程目录下
    发表于 10-15 11:41

    使用OLE DB操作数据库

    使用OLE DB操作数据库 要运行程序必须将数据库文件students.mdb与可执行文件放在一起,如果在vc开发环境中运行,则需要将该数据库文件放在工程目录下
    发表于 10-15 11:41

    使用DAO操作数据库

    使用DAO操作数据库要运行程序必须将数据库文件course.mdb与可执行文件放在一起,如果在vc开发环境中运行,则需要将该数据库文件放在工程目录下
    发表于 10-15 11:42

    labview连接MS SQL数据库示例

    网络上的连接数据库示例多少都有点问题,因此参照C#的操作方法,封装了一个VI,来操作数据库。亮点:可以读取二进制格式字段。
    发表于 10-12 15:41

    《Dot.NET数据库开发技术》操作数据库.pdf

    《Dot.NET数据库开发技术》操作数据库.pdf[hide][/hide]
    发表于 06-23 16:27

    Python数据库建立链接的操作方法

    Python操作数据库
    发表于 04-03 15:01

    pymysql怎么简单的操作数据库

    pymysql简单操作数据库
    发表于 05-01 07:33

    python操作数据库

    python操作数据库
    发表于 05-20 12:11

    Labsql不能操作数据库连接池吗

    如图,好像连接字符串也只能指定provider才行,指定了max pool还是不会报错。C#里for循环是会报错的。还有一个问题,我要多线程操作数据库,应该怎么玩?数据库会错乱吗?有好多个工位会在不定时间里读写。请问应该怎么操作
    发表于 09-09 14:44

    使用SQL语句操作数据库

    第一步:Linux开发环境搭建第二步:安装sqlite数据库第三步:sqlite数据库使用1.sqlite部分命令2.使用SQL语句操作数据库(1)创建一个数据表:student(2)
    发表于 11-04 06:23

    《Dot.NET数据库开发技术》操作数据库

    《Dot.NET数据库开发技术》操作数据库
    发表于 02-07 15:11 0次下载

    PHP的使用教程之操作数据库详细资料说明

    本文档的主要内容详细介绍的是PHP的使用教程之操作数据库详细资料说明包括了:1.掌握PHP连接数据库的方法,2.掌握PHP创建一个数据库
    发表于 05-29 16:51 12次下载
    PHP的使用教程之<b class='flag-5'>操作数据库</b>的<b class='flag-5'>详细</b>资料说明

    操作数据库还是先操作缓存?

    来源:捡田螺的小男孩 前言 在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?本文将分5种方案展开阐述对比,谢谢阅读~ 缓存维护方案一 如果是一读(线
    的头像 发表于 10-30 11:09 1810次阅读
    先<b class='flag-5'>操作数据库</b>还是先<b class='flag-5'>操作</b>缓存?

    PLC编程中的操作数是什么

    操作数是指等待CPU处理的数据,也是指等待处理的数据所在的内存地址。操作数包括标识符和标识参数,标识符分为主标识符和辅助标识符。 (1)标识符(存储
    发表于 12-20 10:13 5740次阅读

    扫描操作数的信号上升沿

    使用“扫描操作数的信号上升沿”指令,可以确定所指定操作数)的信号状态是否从“0”变为“1”。
    的头像 发表于 06-27 09:39 1766次阅读
    扫描<b class='flag-5'>操作数</b>的信号上升沿