Python 如何操作 SQLite 數(shù)據(jù)庫
寫在之前
SQLite 是一個小型的關(guān)系型數(shù)據(jù)庫,它最大的特點在于不需要單獨的服務、零配置。我們在之前講過的兩個數(shù)據(jù)庫,不管是 MySQL 還是 MongoDB,都需要我們安裝。安裝之后,然后運行起來,其實這就相當于已經(jīng)有一個相應的服務在跑著。
SQLite 與前面所說的兩個數(shù)據(jù)庫不同。首先Python 已經(jīng)將相應的驅(qū)動模塊作為了標準庫的一部分,只要是你安裝了 Python,就可以使用;再者它可以類似于操作文件那樣來操作 SQLite 數(shù)據(jù)庫文件。還有一點,SQLite 源代碼不受版權(quán)限制。
建立連接
SQLite 也是一個關(guān)系型數(shù)據(jù)庫,所以 SQL 可以直接在里面使用。由于 SQLite 的驅(qū)動已經(jīng)在 Python 里面了,所以只要引用就可以直接使用,由于我們之前已經(jīng)講過 MySQL 了,所以對于本次內(nèi)容理解起來就容易多了。
>>> import sqlite3
>>> conn = sqlite3.connect('lite.db')
由上面的代碼我們得到了連接對象,是不是覺得比 MySQL 連接要簡單很多呢?在 sqlite3.connect('lite.db') 中,如果已經(jīng)有了那個數(shù)據(jù)庫,就直接連接它,如果沒有的話,就會自動建一個。需要注意的是,這里的路徑是可以隨意指定的。
下面的代碼顯示的是連接對象的屬性和方法:
>>> dir(conn) ['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'commit', 'create_aggregate', 'create_collation', 'create_function', 'cursor', 'execute', 'executemany', 'executescript', 'in_transaction', 'interrupt', 'isolation_level', 'iterdump', 'rollback', 'row_factory', 'set_authorizer', 'set_progress_handler', 'set_trace_callback', 'text_factory', 'total_changes']
建立游標
這一步其實跟 MySQL 也很類似,連接了數(shù)據(jù)庫之后,要建立游標對象:
>>> cur = conn.cursor()
接下來就是對數(shù)據(jù)庫內(nèi)容的操作,都是用游標對象方法來實現(xiàn):
>>> dir(cur) ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'arraysize', 'close', 'connection', 'description', 'execute', 'executemany', 'executescript', 'fetchall', 'fetchmany', 'fetchone', 'lastrowid', 'row_factory', 'rowcount', 'setinputsizes', 'setoutputsize']
我們在里面看到了一系列我們熟悉的名稱:close()、execute()、fetchall() 等。
1.創(chuàng)建數(shù)據(jù)庫表
面對 SQLite 數(shù)據(jù)庫,我們之前熟悉的 SQL 指令都可以用:
>>> create_table = "create table books (title,author,language)" >>> cur.execute(create_table) <sqlite3.Cursor object at 0x104f296c0>
這樣就在數(shù)據(jù)庫 lite.db 中建立了一個表 books。對這個表可以增加數(shù)據(jù):
>>> cur.execute('insert into books values("python basic","rocky","python")')
<sqlite3.Cursor object at 0x104f296c0>
為了保證數(shù)據(jù)能夠保存,還要進行如下操作:
>>> conn.commit() >>> cur.close() >>> conn.close()
以上,在剛才建立的數(shù)據(jù)庫中已經(jīng)有了一個表 books,表中已經(jīng)有了一條記錄。
2.查詢
保存以后我們來查詢一下:
>>> conn = sqlite3.connect('lite.db')
>>> cur = conn.cursor()
>>> cur.execute('select * from books')
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall()
[('python basic', 'rocky', 'python')]
3.批量插入
我們來給 books 表中多增加一些內(nèi)容,以便于我們進行其它的操作:
>>> books = [("first book","first","c"),("second book","second","c++"),("third book","third","java")]
這次我們來一個批量插入:
>>> cur.executemany('insert into books values (?,?,?)',books)
<sqlite3.Cursor object at 0x104f297a0>
>>> conn.commit()
接下來我們用循環(huán)語句來打印一下查詢結(jié)果:
>>> rows = cur.execute('select * from books')
>>> for row in rows:
... print(row)
...
('python basic', 'rocky', 'python')
('first book', 'first', 'c')
('second book', 'second', 'c++')
('third book', 'third', 'java')
4.更新
正如我們前面所說的,在 cur.execute() 中,可以寫 SQL 語句來操作數(shù)據(jù)庫:
>>> cur.execute("update books set title='physics' where author='first'")
<sqlite3.Cursor object at 0x104f297a0>
>>> conn.commit()
接下來我們按照條件查詢來看一看:
>>> cur.execute("select * from books where author='first'")
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall()
[('physics', 'first', 'c')]
5.刪除
刪除也是操作數(shù)據(jù)庫必須的動作:
>>> cur.execute("select * from books")
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall()
[('python basic', 'rocky', 'python'), ('physics', 'first', 'c'), ('third book', 'third', 'java')]
最后不要忘記在完成對數(shù)據(jù)庫的操作以后,一定記得給人家「關(guān)上門」:
>>> cur.close() >>> conn.close()
寫在之后
基本的知識差不多就是這些,當然肯定不局限于此。在實際的編程中我們肯定會遇到很多的問題,大家記得要多多去查閱官方文檔,學會解決問題。
至此,Python 操作數(shù)據(jù)這一部分就結(jié)束了,其實不光是這一個章節(jié)的結(jié)束,我計劃里面的整個「零基礎(chǔ)入門學習 Python」這個系列也到此結(jié)束了,后續(xù)隨著我碰到的知識的增加,還會再給大家更新關(guān)于 Python 方面的東西,讓我們一起加油。
如果你覺得本篇文章對你有所幫助的話,歡迎點贊 + 關(guān)注,期待和你的交流。
The end。
以上就是Python 如何操作 SQLite 數(shù)據(jù)庫的詳細內(nèi)容,更多關(guān)于python操作 SQLite 數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python圖像處理之直線和曲線的擬合與繪制【curve_fit()應用】
這篇文章主要介紹了Python圖像處理之直線和曲線的擬合與繪制,結(jié)合實例形式分析了Python曲線擬合相關(guān)函數(shù)curve_fit()的使用技巧,需要的朋友可以參考下2018-12-12
Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作
這篇文章主要介紹了Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06
Python實現(xiàn)將藍底照片轉(zhuǎn)化為白底照片功能完整實例
這篇文章主要介紹了Python實現(xiàn)將藍底照片轉(zhuǎn)化為白底照片功能,結(jié)合完整實例形式分析了Python基于cv2庫進行圖形轉(zhuǎn)換操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-12-12
請不要重復犯我在學習Python和Linux系統(tǒng)上的錯誤
本人已經(jīng)在運維行業(yè)工作了將近十年,我最早接觸Linux是在大二的樣子,那時候只追求易懂,所以就選擇了Ubuntu作為學習、使用的對象,它簡單、易用、好操作、界面絢麗,對于想接觸Linux的新手來說是非常不錯的2016-12-12
python反反爬蟲技術(shù)限制連續(xù)請求時間處理
這篇文章主要為大家介紹了python反反爬蟲技術(shù)限制連續(xù)請求時間處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
Python編程利用科赫曲線實現(xiàn)三維飄雪效果示例過程
這篇文章主要介紹了Python編程實現(xiàn)三維飄雪效果示例過程,通過本示例你可以自己做出一個浪漫的雪花飄落效果,有需要的朋友可以借鑒參考下2021-10-10

