最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python操作SQLite數(shù)據(jù)庫(kù)的方法詳解

 更新時(shí)間:2017年06月16日 11:32:04   作者:廖先生  
這篇文章主要介紹了Python操作SQLite數(shù)據(jù)庫(kù)的方法,較為詳細(xì)的分析了Python安裝sqlite數(shù)據(jù)庫(kù)模塊及針對(duì)sqlite數(shù)據(jù)庫(kù)的常用操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python操作SQLite數(shù)據(jù)庫(kù)的方法。分享給大家供大家參考,具體如下:

SQLite簡(jiǎn)單介紹

SQLite數(shù)據(jù)庫(kù)是一款非常小巧的嵌入式開(kāi)源數(shù)據(jù)庫(kù)軟件,也就是說(shuō)沒(méi)有獨(dú)立的維護(hù)進(jìn)程,所有的維護(hù)都來(lái)自于程序本身。它是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月. 至今已經(jīng)有10個(gè)年頭,SQLite也迎來(lái)了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。

安裝與使用

1.導(dǎo)入Python SQLITE數(shù)據(jù)庫(kù)模塊

     Python2.5之后,內(nèi)置了SQLite3,成為了內(nèi)置模塊,這給我們省了安裝的功夫,只需導(dǎo)入即可~

import sqlite3

2. 創(chuàng)建/打開(kāi)數(shù)據(jù)庫(kù)

     在調(diào)用connect函數(shù)的時(shí)候,指定庫(kù)名稱,如果指定的數(shù)據(jù)庫(kù)存在就直接打開(kāi)這個(gè)數(shù)據(jù)庫(kù),如果不存在就新創(chuàng)建一個(gè)再打開(kāi)。

cx = sqlite3.connect("E:/test.db")

     也可以創(chuàng)建數(shù)據(jù)庫(kù)在內(nèi)存中。

con = sqlite3.connect(":memory:")

3.數(shù)據(jù)庫(kù)連接對(duì)象

    打開(kāi)數(shù)據(jù)庫(kù)時(shí)返回的對(duì)象cx就是一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象,它可以有以下操作:

① commit()--事務(wù)提交  
② rollback()--事務(wù)回滾  
③ close()--關(guān)閉一個(gè)數(shù)據(jù)庫(kù)連接  
④ cursor()--創(chuàng)建一個(gè)游標(biāo)

    關(guān)于commit(),如果isolation_level隔離級(jí)別默認(rèn),那么每次對(duì)數(shù)據(jù)庫(kù)的操作,都需要使用該命令,你也可以設(shè)置isolation_level=None,這樣就變?yōu)樽詣?dòng)提交模式。

4.使用游標(biāo)查詢數(shù)據(jù)庫(kù)

我們需要使用游標(biāo)對(duì)象SQL語(yǔ)句查詢數(shù)據(jù)庫(kù),獲得查詢對(duì)象。 通過(guò)以下方法來(lái)定義一個(gè)游標(biāo)。

cu=cx.cursor()

游標(biāo)對(duì)象有以下的操作:

① execute()--執(zhí)行sql語(yǔ)句  
② executemany--執(zhí)行多條sql語(yǔ)句  
③ close()--關(guān)閉游標(biāo)  
④ fetchone()--從結(jié)果中取一條記錄,并將游標(biāo)指向下一條記錄  
⑤ fetchmany()--從結(jié)果中取多條記錄  
⑥ fetchall()--從結(jié)果中取出所有記錄  
⑦ scroll()--游標(biāo)滾動(dòng)

1. 建表

復(fù)制代碼 代碼如下:
cu.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")

上面語(yǔ)句創(chuàng)建了一個(gè)叫catalog的表,它有一個(gè)主鍵id,一個(gè)pid,和一個(gè)name,name是不可以重復(fù)的,以及一個(gè)nickname默認(rèn)為NULL。

2. 插入數(shù)據(jù)

請(qǐng)注意避免以下寫法:

# Never do this -- insecure 會(huì)導(dǎo)致注入攻擊
pid=200
c.execute("... where pid = '%s'" % pid)

正確的做法如下,如果t只是單個(gè)數(shù)值,也要采用t=(n,)的形式,因?yàn)樵M是不可變的。

for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
  cx.execute("insert into catalog values (?,?,?,?)", t)

簡(jiǎn)單的插入兩行數(shù)據(jù),不過(guò)需要提醒的是,只有提交了之后,才能生效.我們使用數(shù)據(jù)庫(kù)連接對(duì)象cx來(lái)進(jìn)行提交commit和回滾rollback操作.

cx.commit()

3.查詢

cu.execute("select * from catalog") 

要提取查詢到的數(shù)據(jù),使用游標(biāo)的fetch函數(shù),如:

In [10]: cu.fetchall()
Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

如果我們使用cu.fetchone(),則首先返回列表中的第一項(xiàng),再次使用,則返回第二項(xiàng),依次下去.

4.修改

In [12]: cu.execute("update catalog set name='Boy' where id = 0")
In [13]: cx.commit()

注意,修改數(shù)據(jù)以后提交

5.刪除

cu.execute("delete from catalog where id = 1") 
cx.commit() 

6.使用中文

請(qǐng)先確定你的IDE或者系統(tǒng)默認(rèn)編碼是utf-8,并且在中文前加上u

x=u'魚'
cu.execute("update catalog set name=? where id = 0",x)
cu.execute("select * from catalog")
cu.fetchall()
[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

如果要顯示出中文字體,那需要依次打印出每個(gè)字符串

In [26]: for item in cu.fetchall():
  ....:   for element in item:
  ....:     print element,
  ....:   print
  ....: 
0 10 魚 Yu
1 20 cba Xu

7.Row類型

Row提供了基于索引和基于名字大小寫敏感的方式來(lái)訪問(wèn)列而幾乎沒(méi)有內(nèi)存開(kāi)銷。 原文如下:

sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution.

Row對(duì)象的詳細(xì)介紹

class sqlite3.Row
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
keys()
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description.
New in version 2.6.

下面舉例說(shuō)明

In [30]: cx.row_factory = sqlite3.Row
In [31]: c = cx.cursor()
In [32]: c.execute('select * from catalog')
Out[32]: <sqlite3.Cursor object at 0x05666680>
In [33]: r = c.fetchone()
In [34]: type(r)
Out[34]: <type 'sqlite3.Row'>
In [35]: r
Out[35]: <sqlite3.Row object at 0x05348980>
In [36]: print r
(0, 10, u'\u9c7c', u'Yu')
In [37]: len(r)
Out[37]: 4
In [39]: r[2]      #使用索引查詢
Out[39]: u'\u9c7c'
In [41]: r.keys()
Out[41]: ['id', 'pid', 'name', 'nickname']
In [42]: for e in r:
  ....:   print e,
  ....: 
0 10 魚 Yu

使用列的關(guān)鍵詞查詢

In [43]: r['id']
Out[43]: 0
In [44]: r['name']
Out[44]: u'\u9c7c'

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 淺析Python的對(duì)象拷貝和內(nèi)存布局

    淺析Python的對(duì)象拷貝和內(nèi)存布局

    這篇文章主要為大家詳細(xì)介紹了Python中的對(duì)象拷貝和內(nèi)存布局的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-12-12
  • 詳解python中__name__的意義以及作用

    詳解python中__name__的意義以及作用

    這篇文章主要介紹了詳解python中__name__的意義以及作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python遞歸下載文件夾下所有文件

    python遞歸下載文件夾下所有文件

    這篇文章主要為大家詳細(xì)介紹了python遞歸下載文件夾下所有文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Python Pandas找到缺失值的位置方法

    Python Pandas找到缺失值的位置方法

    下面小編就為大家分享一篇Python Pandas找到缺失值的位置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python中如何使用樸素貝葉斯算法

    python中如何使用樸素貝葉斯算法

    本文主要介紹了python中如何使用樸素貝葉斯算法的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Python中切片操作符的具體使用

    Python中切片操作符的具體使用

    Python切片操作用于提取序列(如列表、字符串)的子集,支持正負(fù)索引和步長(zhǎng),返回淺拷貝新對(duì)象,切片操作通常用于列表、元組、字符串等,下面就具體來(lái)了解一下
    2025-07-07
  • 基于Python實(shí)現(xiàn)一個(gè)圖片壓縮工具

    基于Python實(shí)現(xiàn)一個(gè)圖片壓縮工具

    圖片壓縮是在保持圖像質(zhì)量的同時(shí)減小圖像文件大小的過(guò)程,本文將學(xué)習(xí)如何使用Python來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單但功能強(qiáng)大的圖片壓縮工具,以及如何在不同情境下進(jìn)行圖片壓縮,希望對(duì)大家有所幫助
    2024-01-01
  • Python中函數(shù)的用法實(shí)例教程

    Python中函數(shù)的用法實(shí)例教程

    這篇文章主要介紹了Python中函數(shù)的用法,以數(shù)值計(jì)算的實(shí)例方式講述了Python程序設(shè)計(jì)中函數(shù)的功能機(jī)抽象化特點(diǎn),需要的朋友可以參考下
    2014-09-09
  • 在Python中處理列表之reverse()方法的使用教程

    在Python中處理列表之reverse()方法的使用教程

    這篇文章主要介紹了在Python中處理列表之reverse()方法的使用教程,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Anaconda(miniconda)入門使用完全指南

    Anaconda(miniconda)入門使用完全指南

    Conda是一個(gè)管理版本和Python環(huán)境的工具,它使用起來(lái)非常容易,下面這篇文章主要給大家介紹了關(guān)于Anaconda(miniconda)入門使用的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評(píng)論

无极县| 桦南县| 临澧县| 浮山县| 巴东县| 旬邑县| 阳泉市| 南雄市| 八宿县| 洛川县| 渭源县| 西青区| 阳曲县| 股票| 莱阳市| 陆河县| 田东县| 丹棱县| 中江县| 保康县| 泰兴市| 乌兰浩特市| 三亚市| 驻马店市| 沁阳市| 靖江市| 延庆县| 沿河| 贵州省| 乌恰县| 荆州市| 宜黄县| 辽宁省| 桃园县| 韶关市| 锡林郭勒盟| 罗城| 永兴县| 抚顺县| 吴堡县| 平湖市|