成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python操作SQLite/MySQL/LMDB/LevelDB

開發 后端 數據庫
最近用Caffe跑自己的數據集,需要學習LMDB和LevelDB,趁此機會復習了SQLite和MySQL的使用,一起整理在此。環境使用Ubuntu 14.04,Python 2.7.6。

 Python操作SQLite/MySQL/LMDB/LevelDB

1. 概述

1.1 前言

最近用Caffe跑自己的數據集,需要學習LMDB和LevelDB,趁此機會復習了SQLite和MySQL的使用,一起整理在此。

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

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()關閉與數據庫文件的連接。

詳細的sqlite3模塊API可以看這里:

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

總結起來就是用cursor.execute()執行SQL語句,改變數據(插入、刪除、修改)時用connection.commit()提交變更,查詢數據時用cursor.fetchall()得到查詢結果。

2.3 操作實例

2.3.1 建立數據庫與建立表

直接來看例子:

這里conn是與數據庫文件test.db的連接對象,c是conn的光標對象,通過c.execute()執行建表操作,創建了簡單的學生信息表(學號,名字),通過conn.commit()提交,最后用conn.close()關閉連接。

conn.open()發現文件不存在時會自動創建,這里使用了文件“test.db”,也可以使用“:memory:”建立內存數據庫。

2.3.2 插入、刪除、修改

為了便于多次運行,直接使用了內存數據庫:

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

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

另外注意不需要每次execute后調用commit。

2.3.3 查詢

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

運行一下,輸出結果為:

test_query.py

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

2.3.4 完整的例子

把上面的操作寫成函數形式:

運行一下,輸出結果為:

test_sqlite.py

之后用的例子都是這個簡單的學生信息表(學號,姓名)。

3. MySQL

3.1 準備

安裝MySQL:

安裝MySQLdb:

使用時import MySQLdb(注意大小寫)。

3.2 操作流程

同為關系型數據庫,MySQL的操作方法和SQLite是大同小異的。建立連接對象與光標對象,用execute()執行SQL語句,commi()提交事物,fetchall()獲得查詢結果。

3.3 操作實例

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

對比后可以發現區別僅是建立連接時參數復雜一些,同時需要用select_db()選擇數據庫。

運行一下,輸出結果為:

test_mysql.py

4. LMDB

4.1 準備

學習LMDB的時候不禁想到知乎上的提問“有哪些名人長期生活在其他名人的光環下”,說實話感覺查它的人基本都是為了用Caffe……

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

安裝:

使用時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 建立環境

運行一下,查看當前目錄的變化:

set_env.py

可以看到當前目錄下多了students目錄,里面有data.mdb和lock.mdb兩個文件。

4.3.2 插入、刪除、修改

插入與修改都用put實現,刪除用delete實現。

注意用txn = env.begin()創建事務時,有write = True才能夠寫數據庫。

4.3.3 查詢

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

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

運行一下,輸出結果為:

test_query.py

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

4.3.4 完整的例子

運行一下,輸出結果為:

test_lmdb.py

5. LevelDB

5.1 準備

同為key-value數據庫,LevelDB的資料比LMDB豐富太多了。值得一提的是LevelDB實現時用到了SkipList,以后有機會要親自實現一下。

安裝:

使用時import leveldb。

5.2 操作流程

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

5.3 操作實例

來看LevelDB版本的完整例子:

運行一下,輸出結果為:

test_leveldb.py

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

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

7. 參考資料

  • SQLite

SQLite教程:

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

SQLite全面學習:

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

Python文檔關于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/ 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2023-08-10 08:01:21

2010-03-03 17:10:57

Python操作Sql

2010-03-04 15:31:44

Python SQLI

2011-07-04 17:18:23

Qt SQLite 數據庫

2025-03-19 10:05:10

PythonMySQL數據庫

2015-10-30 15:30:54

LevelDBSSTableSybase

2011-06-09 09:28:24

LevelDB

2011-07-05 10:16:16

Qt 數據庫 SQLite

2011-07-05 14:46:34

2017-12-20 08:58:14

LevelDB概覽思路

2021-09-05 07:55:36

Lsm核心實現

2011-07-12 15:22:04

SQLite數據庫

2011-07-26 18:11:56

iPhone Sqlite 數據庫

2024-03-07 13:02:57

PythonSQLite數據庫

2022-06-22 09:56:19

PythonMySQL數據庫

2011-08-08 15:25:42

iPhone SQLite BLOB

2011-07-07 16:42:38

iPhone Sqlite3 數據庫

2016-10-26 20:57:49

AndroidJava單元測試

2011-08-25 10:13:32

對leveldb的訪問LLServer編譯安

2020-09-03 11:35:22

SQLiteMySQLPostgreSQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一二区在线 | 亚州午夜精品 | 国产精品一区二区在线 | 精品欧美视频 | 国产一区二区三区四区在线观看 | 草久久| 国产精品精品视频一区二区三区 | 黄色大片免费网站 | 国产一级特黄视频 | 色综合一区 | 国产探花在线精品一区二区 | 国产亚洲精品久久午夜玫瑰园 | 亚洲网址 | 99精品在线观看 | 久热伊人 | 久久精品亚洲一区 | 作爱视频免费看 | 国产精品综合网 | 国产精品久久久久一区二区三区 | 精品av| 最新91在线| aaa在线观看 | 欧美激情综合五月色丁香小说 | 欧美日韩精品一区二区三区蜜桃 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 一区二区三区免费观看 | 中文字幕亚洲视频 | 九九热精品视频 | 天天艹日日干 | 国偷自产av一区二区三区 | 56pao在线 | 99视频免费| 欧美日韩黄色一级片 | 人人干人人舔 | 色综合一区二区三区 | 日韩亚洲视频在线 | 伊人一区| 日本成人在线免费视频 | 亚洲一区二区三区免费视频 | 亚洲在线一区二区三区 | 男女羞羞免费视频 |