衡阳派盒市场营销有限公司

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

    文章

    829

    瀏覽量

    26742
  • SQlite
    +關注

    關注

    0

    文章

    78

    瀏覽量

    16021
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037

原文標題: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 ?2044次閱讀
    先<b class='flag-5'>操作數據庫</b>還是先<b class='flag-5'>操作</b>緩存?

    分布式系統中先操作數據庫還是先操作緩存

    前言 在分布式系統中,緩存和數據庫同時存在時,如果有寫操作,先操作數據庫還是先操作緩存呢?本文將分5種方案展開闡述對比,謝謝閱讀~github地址,衷心感謝每一顆star ?https
    的頭像 發表于 09-30 14:46 ?1636次閱讀

    python讀取數據庫數據 python查詢數據庫 python數據庫連接

    ,獲取數據庫中的數據,并對數據進行增刪改查等操作。本文將詳細介紹Python如何連接
    的頭像 發表于 08-28 17:09 ?1904次閱讀
    全迅网百家乐官网的玩法技巧和规则| 属猪的人做生意摆放什么聚财| 马洪刚百家乐技巧| 大发娱乐城888| 娱乐城百家乐官网打不开| 利来百家乐官网娱乐| 大发888游戏平台hana| 博彩百家乐官网龙虎| 诚信百家乐在线平台| 智尊国际娱乐| 百家乐官网开闲的几率多大| 百家乐园云鼎娱乐网| 百家乐官网公试打法| 百家乐连开6把小| 潼关县| 缅甸百家乐网上投注| 大玩家娱乐城开户| 百家乐桌颜色可定制| 瑞金市| 在线百家乐游戏软件| 百家乐官网娱乐网站| 百家乐龙虎台布作弊技巧| 凯旋门百家乐官网游戏| 百家乐怎么样投注| 998棋牌游戏中心| 有看做生意风水的大师吗| 蒙特卡罗娱乐场| 百家乐色子玩法| 金塔县| 南宁百家乐赌| 足球百家乐官网投注| 大发888国际娱乐城| 百家乐官网娱乐礼金| 百樂坊娱乐| 百家乐技巧真人荷官网| 娱乐城百家乐官网可以代理吗 | 威尼斯人娱乐城首存优惠| 网上百家乐官网是现场吗| 958棋牌游戏| 百家乐投注程式| 游戏房百家乐官网赌博图片|