寫在之前
SQLite 是一個小型的關系型數據庫,它最大的特點在于不需要單獨的服務、零配置。我們在之前講過的兩個數據庫,不管是 MySQL 還是 MongoDB,都需要我們安裝。安裝之后,然后運行起來,其實這就相當于已經有一個相應的服務在跑著。
SQLite 與前面所說的兩個數據庫不同。首先Python 已經將相應的驅動模塊作為了標準庫的一部分,只要是你安裝了 Python,就可以使用;再者它可以類似于操作文件那樣來操作 SQLite 數據庫文件。還有一點,SQLite 源代碼不受版權限制。
建立連接
SQLite 也是一個關系型數據庫,所以 SQL 可以直接在里面使用。由于 SQLite 的驅動已經在 Python 里面了,所以只要引用就可以直接使用,由于我們之前已經講過 MySQL 了,所以對于本次內容理解起來就容易多了。
1
2
|
>>> import sqlite3 >>> conn = sqlite3.connect( 'lite.db' ) |
由上面的代碼我們得到了連接對象,是不是覺得比 MySQL 連接要簡單很多呢?在 sqlite3.connect('lite.db') 中,如果已經有了那個數據庫,就直接連接它,如果沒有的話,就會自動建一個。需要注意的是,這里的路徑是可以隨意指定的。
下面的代碼顯示的是連接對象的屬性和方法:
1
2
|
>>> 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 也很類似,連接了數據庫之后,要建立游標對象:
1
|
>>> cur = conn.cursor() |
接下來就是對數據庫內容的操作,都是用游標對象方法來實現:
1
2
|
>>> 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.創建數據庫表
面對 SQLite 數據庫,我們之前熟悉的 SQL 指令都可以用:
1
2
3
|
>>> create_table = "create table books (title,author,language)" >>> cur.execute(create_table) <sqlite3.Cursor object at 0x104f296c0 > |
這樣就在數據庫 lite.db 中建立了一個表 books。對這個表可以增加數據:
1
2
|
>>> cur.execute( 'insert into books values("python basic","rocky","python")' ) <sqlite3.Cursor object at 0x104f296c0 > |
為了保證數據能夠保存,還要進行如下操作:
1
2
3
|
>>> conn.commit() >>> cur.close() >>> conn.close() |
以上,在剛才建立的數據庫中已經有了一個表 books,表中已經有了一條記錄。
2.查詢
保存以后我們來查詢一下:
1
2
3
4
5
6
|
>>> 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 表中多增加一些內容,以便于我們進行其它的操作:
1
|
>>> books = [( "first book" , "first" , "c" ),( "second book" , "second" , "c++" ),( "third book" , "third" , "java" )] |
這次我們來一個批量插入:
1
2
3
|
>>> cur.executemany( 'insert into books values (?,?,?)' ,books) <sqlite3.Cursor object at 0x104f297a0 > >>> conn.commit() |
接下來我們用循環語句來打印一下查詢結果:
1
2
3
4
5
6
7
8
|
>>> 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 語句來操作數據庫:
1
2
3
|
>>> cur.execute( "update books set id="codetool">
接下來我們按照條件查詢來看一看:
5.刪除 刪除也是操作數據庫必須的動作:
最后不要忘記在完成對數據庫的操作以后,一定記得給人家「關上門」:
寫在之后 基本的知識差不多就是這些,當然肯定不局限于此。在實際的編程中我們肯定會遇到很多的問題,大家記得要多多去查閱官方文檔,學會解決問題。 至此,Python 操作數據這一部分就結束了,其實不光是這一個章節的結束,我計劃里面的整個「零基礎入門學習 Python」這個系列也到此結束了,后續隨著我碰到的知識的增加,還會再給大家更新關于 Python 方面的東西,讓我們一起加油。 如果你覺得本篇文章對你有所幫助的話,歡迎點贊 + 關注,期待和你的交流。 The end。 以上就是Python 如何操作 SQLite 數據庫的詳細內容,更多關于python操作 SQLite 數據庫的資料請關注服務器之家其它相關文章! 原文鏈接:https://cloud.tencent.com/developer/article/1534514 延伸 · 閱讀
精彩推薦
|