在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    849

    瀏覽量

    27665
  • SQlite
    +關注

    關注

    0

    文章

    81

    瀏覽量

    16342
  • python
    +關注

    關注

    56

    文章

    4825

    瀏覽量

    86374

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

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

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

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

    ,獲取數據庫中的數據,并對數據進行增刪改查等操作。本文將詳細介紹Python如何連接
    的頭像 發表于 08-28 17:09 ?2167次閱讀
    主站蜘蛛池模板: 四虎永久在线观看免费网站网址 | 亚洲国产成a人v在线观看 | 日本人爽p大片免费看 | 91国内在线视频 | 5566精品资源在线播放 | 性生i活一级一片 | 国产精品人人爱一区二区白浆 | 亚洲一区二区三区电影 | se97se成人亚洲网站在线观看 | 久久久久久久久综合 | 日韩一区二区在线观看 | 国产三级日本三级韩国三级在线观看 | 午夜性刺激免费视频观看不卡专区 | 免费爱爱网| 国产精选经典三级小泽玛利亚 | 国产午夜视频在线观看第四页 | 扒开双腿猛进湿润18p | 久久99综合| 国产98在线传媒在线视频 | 97色婷婷成人综合在线观看 | 中文字幕亚洲色图 | 日本三级2018亚洲视频 | 色网综合| 亚洲高清国产拍精品影院 | 伊人久久大香线蕉综合亚洲 | 种子天堂 | 噜噜噜久久久 | 国产精品亚洲色图 | 国产成人永久在线播放 | 天天操天天艹 | 色老久久精品偷偷鲁一区 | 精品视频免费看 | 亚洲一区二区三区四区在线 | 久久天天躁夜夜躁狠狠85麻豆 | 久久精品国产99久久72 | 天天弄天天模 | 9299yy看片淫黄大片在线 | 狠狠干夜夜骑 | 天堂中文资源在线观看 | 在线国产你懂的 | 亚洲成在人天堂一区二区 |