日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python操作SQLite/MySQL/LMDB/LevelDB

1. 概述

成都創(chuàng)新互聯(lián)公司主營(yíng)上杭網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開(kāi)發(fā),上杭h5微信小程序開(kāi)發(fā)搭建,上杭網(wǎng)站營(yíng)銷(xiāo)推廣歡迎上杭等地區(qū)企業(yè)咨詢(xún)

1.1 前言

最近用Caffe跑自己的數(shù)據(jù)集,需要學(xué)習(xí)LMDB和LevelDB,趁此機(jī)會(huì)復(fù)習(xí)了SQLite和MySQL的使用,一起整理在此。

代碼:https://github.com/liquidconv/py4db

1.2 環(huán)境

使用Ubuntu 14.04,Python 2.7.6。

2. SQLite

2.1 準(zhǔn)備

SQLite是一種嵌入式數(shù)據(jù)庫(kù),它的數(shù)據(jù)庫(kù)就是一個(gè)文件。Python 2.5x以上版本內(nèi)置了SQLite3,使用時(shí)直接import sqlite3即可。

2.2 操作流程

概括地講,操作SQLite的流程是:

  • 通過(guò)sqlite3.open()創(chuàng)建與數(shù)據(jù)庫(kù)文件的連接對(duì)象connection;
  • 通過(guò)connection.cursor()創(chuàng)建光標(biāo)對(duì)象cursor;
  • 通過(guò)cursor.execute()執(zhí)行SQL語(yǔ)句;
  • 通過(guò)connection.commit()提交當(dāng)前的事務(wù),或者通過(guò)cursor.fetchall()獲得查詢(xún)結(jié)果;
  • 通過(guò)connection.close()關(guān)閉與數(shù)據(jù)庫(kù)文件的連接。

詳細(xì)的sqlite3模塊API可以看這里:

http://www.runoob.com/sqlite/sqlite-python.html

總結(jié)起來(lái)就是用cursor.execute()執(zhí)行SQL語(yǔ)句,改變數(shù)據(jù)(插入、刪除、修改)時(shí)用connection.commit()提交變更,查詢(xún)數(shù)據(jù)時(shí)用cursor.fetchall()得到查詢(xún)結(jié)果。

2.3 操作實(shí)例

2.3.1 建立數(shù)據(jù)庫(kù)與建立表

直接來(lái)看例子:

這里conn是與數(shù)據(jù)庫(kù)文件test.db的連接對(duì)象,c是conn的光標(biāo)對(duì)象,通過(guò)c.execute()執(zhí)行建表操作,創(chuàng)建了簡(jiǎn)單的學(xué)生信息表(學(xué)號(hào),名字),通過(guò)conn.commit()提交,最后用conn.close()關(guān)閉連接。

conn.open()發(fā)現(xiàn)文件不存在時(shí)會(huì)自動(dòng)創(chuàng)建,這里使用了文件“test.db”,也可以使用“:memory:”建立內(nèi)存數(shù)據(jù)庫(kù)。

2.3.2 插入、刪除、修改

為了便于多次運(yùn)行,直接使用了內(nèi)存數(shù)據(jù)庫(kù):

做的事情還是非常簡(jiǎn)單易懂的,向?qū)W生信息表中插入(1,Alice)、(2,Bob)、(3,Peter)三條記錄,刪除(1,Alice),修改(3,Peter)為(3,Mark)。

“?”是sqlite3中的占位符,execute時(shí)會(huì)用第二個(gè)參數(shù)元組里的元素按順序替換。官方文檔里建議出于安全考慮,不要直接用python做字符串拼接。

另外注意不需要每次execute后調(diào)用commit。

2.3.3 查詢(xún)

直接在上面的代碼commit之后加上:

運(yùn)行一下,輸出結(jié)果為:

test_query.py

fetchall()返回的是記錄數(shù)組,可以通過(guò)WHERE子句做更細(xì)致的選擇。

2.3.4 完整的例子

把上面的操作寫(xiě)成函數(shù)形式:

運(yùn)行一下,輸出結(jié)果為:

test_sqlite.py

之后用的例子都是這個(gè)簡(jiǎn)單的學(xué)生信息表(學(xué)號(hào),姓名)。

3. MySQL

3.1 準(zhǔn)備

安裝MySQL:

安裝MySQLdb:

使用時(shí)import MySQLdb(注意大小寫(xiě))。

3.2 操作流程

同為關(guān)系型數(shù)據(jù)庫(kù),MySQL的操作方法和SQLite是大同小異的。建立連接對(duì)象與光標(biāo)對(duì)象,用execute()執(zhí)行SQL語(yǔ)句,commi()提交事物,fetchall()獲得查詢(xún)結(jié)果。

3.3 操作實(shí)例

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

對(duì)比后可以發(fā)現(xiàn)區(qū)別僅是建立連接時(shí)參數(shù)復(fù)雜一些,同時(shí)需要用select_db()選擇數(shù)據(jù)庫(kù)。

運(yùn)行一下,輸出結(jié)果為:

test_mysql.py

4. LMDB

4.1 準(zhǔn)備

學(xué)習(xí)LMDB的時(shí)候不禁想到知乎上的提問(wèn)“有哪些名人長(zhǎng)期生活在其他名人的光環(huán)下”,說(shuō)實(shí)話(huà)感覺(jué)查它的人基本都是為了用Caffe……

Anyway,LMDB和SQLite/MySQL等關(guān)系型數(shù)據(jù)庫(kù)不同,屬于key-value數(shù)據(jù)庫(kù)(把LMDB想成dict會(huì)比較容易理解),鍵key與值value都是字符串。

安裝:

使用時(shí)import lmdb。

4.2 操作流程

概況地講,操作LMDB的流程是:

  • 通過(guò)env = lmdb.open()打開(kāi)環(huán)境
  • 通過(guò)txn = env.begin()建立事務(wù)
  • 通過(guò)txn.put(key, value)進(jìn)行插入和修改
  • 通過(guò)txn.delete(key)進(jìn)行刪除
  • 通過(guò)txn.get(key)進(jìn)行查詢(xún)
  • 通過(guò)txn.cursor()進(jìn)行遍歷
  • 通過(guò)txn.commit()提交更改

4.3 操作實(shí)例

4.3.1 建立環(huán)境

運(yùn)行一下,查看當(dāng)前目錄的變化:

set_env.py

可以看到當(dāng)前目錄下多了students目錄,里面有data.mdb和lock.mdb兩個(gè)文件。

4.3.2 插入、刪除、修改

插入與修改都用put實(shí)現(xiàn),刪除用delete實(shí)現(xiàn)。

注意用txn = env.begin()創(chuàng)建事務(wù)時(shí),有write = True才能夠?qū)憯?shù)據(jù)庫(kù)。

4.3.3 查詢(xún)

查單條記錄用get(key),遍歷數(shù)據(jù)庫(kù)用cursor。

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

運(yùn)行一下,輸出結(jié)果為:

test_query.py

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

4.3.4 完整的例子

運(yùn)行一下,輸出結(jié)果為:

test_lmdb.py

5. LevelDB

5.1 準(zhǔn)備

同為key-value數(shù)據(jù)庫(kù),LevelDB的資料比LMDB豐富太多了。值得一提的是LevelDB實(shí)現(xiàn)時(shí)用到了SkipList,以后有機(jī)會(huì)要親自實(shí)現(xiàn)一下。

安裝:

使用時(shí)import leveldb。

5.2 操作流程

LevelDB操作時(shí)類(lèi)似與LMDB,使用Put/Get/Delete,但是更加簡(jiǎn)單(不需要事務(wù)txn和commit提交),同時(shí)支持范圍迭代器RangeIter。

5.3 操作實(shí)例

來(lái)看LevelDB版本的完整例子:

運(yùn)行一下,輸出結(jié)果為:

test_leveldb.py

此外,由于沒(méi)有commit()操作,leveldb中用WriteBatch實(shí)現(xiàn)多條更改一次提交,直接copy示例代碼如下:

6. 學(xué)習(xí)總結(jié)

這次學(xué)習(xí)四種數(shù)據(jù)庫(kù)操作時(shí),是按照SQLite -> MySQL -> LMDB -> LevelDB的順序,所以研究SQLite與LMDB花了較長(zhǎng)時(shí)間,而MySQL與LevelDB很快就搞定了。某種意義上,學(xué)習(xí)技術(shù)和背單詞一樣,當(dāng)前掌握的單詞越多,背新單詞就越容易——因?yàn)榭梢园研聠卧~和已經(jīng)掌握的同義詞聯(lián)系在一起,在腦海里聚成簇。

最后回顧一下,SQLite與MySQL都是關(guān)系型數(shù)據(jù)庫(kù),操作時(shí)創(chuàng)建連接對(duì)象connection與光標(biāo)對(duì)象cursor,通過(guò)execute執(zhí)行SQL語(yǔ)句,commit提交變更,fetch得到查詢(xún)結(jié)果;LMDB與LevelDB都是K-V數(shù)據(jù)庫(kù),操作時(shí)建立與數(shù)據(jù)庫(kù)的連接,用put/delete改變數(shù)據(jù),用get獲取數(shù)據(jù),區(qū)別是LMDB中有事務(wù)需要commit,LevelDB不需要。

7. 參考資料

  • SQLite

SQLite教程:

http://www.runoob.com/sqlite/sqlite-python.html

SQLite全面學(xué)習(xí):

http://blog.jobbole.com/92796/

Python文檔關(guān)于sqlite3的介紹:

https://docs.python.org/2/library/sqlite3.html

  • MySQL

MySQLdb模塊:

http://www.oschina.net/code/snippet_16840_1811

Python操作MySQL:

http://www.cnblogs.com/rollenholt/archive/2012/05/29/2524327.html

  • LMDB

Creating an LMDB database in Python:

http://deepdish.io/2015/04/28/creating-lmdb-in-python/

Python lmdb:

http://blog.csdn.net/ayst123/article/details/44077903

lmdb 0.87 documentation:

http://lmdb.readthedocs.org/en/latest/

  • LevelDB

py-leveldb示例代碼:

http://www.oschina.net/p/py-leveldb?fromerr=G5QJs7l1

Having a look at LevelDB:

http://skipperkongen.dk/2013/02/14/having-a-look-at-leveldb/


網(wǎng)頁(yè)題目:Python操作SQLite/MySQL/LMDB/LevelDB
標(biāo)題鏈接:http://www.5511xx.com/article/dhhjdcp.html