Python 操做 SQLite 數據庫

  寫在以前
  
  SQLite 是一個小型的關係型數據庫,它最大的特色在於不須要單獨的服務、零配置。咱們在以前講過的兩個數據庫,不論是 MySQL 仍是 MongoDB,都須要咱們安裝。安裝以後,而後運行起來,其實這就至關於已經有一個相應的服務在跑着。
  
  SQLite 與前面所說的兩個數據庫不一樣。首先Python 已經將相應的驅動模塊做爲了標準庫的一部分,只要是你安裝了 Python,就可使用;再者它能夠相似於操做文件那樣來操做 SQLite 數據庫文件。還有一點,SQLite 源代碼不受版權限制。
  
  創建鏈接
  
  SQLite 也是一個關係型數據庫,因此 SQL 能夠直接在裏面使用。因爲 SQLite 的驅動已經在 Python 裏面了,因此只要引用就能夠直接使用,因爲咱們以前已經講過 MySQL 了,因此對於本次內容理解起來就容易多了。
  
  >>> import sqlite3
  
  >>> conn = sqlite3.connect('lite.db')
  
  由上面的代碼咱們獲得了鏈接對象,是否是以爲比 MySQL 鏈接要簡單不少呢?在 sqlite3.connect('lite.db') 中,若是已經有了那個數據庫,就直接鏈接它,若是沒有的話,就會自動建一個。須要注意的是,這裏的路徑是能夠隨意指定的。
  
  下面的代碼顯示的是鏈接對象的屬性和方法:
  
  >>> 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 也很相似,鏈接了數據庫以後,要創建遊標對象:
  
  >>> cur = conn.cursor()
  
  接下來就是對數據庫內容的操做,都是用遊標對象方法來實現:
  
  >>> 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 指令均可以用:
  
  >>> create_table = "create table books (title,author,language)"
  
  >>> cur.execute(create_table)
  
  <sqlite3.Cursor object at 0x104f296c0>
  
  這樣就在數據庫 lite.db 中創建了一個表 books。對這個表能夠增長數據:
  
  >>> cur.execute('insert into books values("python basic","rocky","python")')
  
  <sqlite3.Cursor object at 0x104f296c0>
  
  爲了保證數據可以保存,還要進行以下操做:
  
  >>> conn.commit()
  
  >>> cur.close()
  
  >>> conn.close()
  
  以上,在剛纔創建的數據庫中已經有了一個表 books,表中已經有了一條記錄。
  
  2.查詢
  
  保存之後咱們來查詢一下:
  
  >>> conn = sqlite3.connect('lite.db')
  
  >>> cur = conn.cursor(www.feifanyule.cn/)
  
  >>> cur.execute('select * from books')
  
  <sqlite3.Cursor object at 0x104f297a0>
  
  >>> cur.fetchall()
  
  [('python basic', 'rocky', 'python')]
  
  3.批量插入
  
  咱們來給 books 表中多增長一些內容,以便於咱們進行其它的操做:
  
  >>> 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()
  
  接下來咱們用循環語句來打印一下查詢結果:
  
  >>> rows = cur.execute('select www.mingcheng178.com* from books')
  
  >>> for row in rows:
  
  ...     print(row)
  
  ...
  
  ('python basic', 'rocky', 'python')
  
  ('first book', 'first', 'c')
  
  ('second book',  www.mhylpt.com/'second', 'c++')
  
  ('third book', 'third',www.yigouyule2.cn 'java')
  
  4.更新
  
  正如咱們前面所說的,在 cur.execute() 中,能夠寫 SQL 語句來操做數據庫:
  
  >>> 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.刪除
  
  刪除也是操做數據庫必須的動做:
  
  >>> cur.execute("www.gcyL157.com select * from books")
  
  <sqlite3.Cursor object at 0x104f297a0>
  
  >>> cur.fetchall(www.michenggw.com)
  
  [('python basic', 'rocky', 'python'), ('physics', 'first', 'c'), ('third book', 'third', 'java')]
  
  最後不要忘記在完成對數據庫的操做之後,必定記得給人家「關上門」:
  
  >>> cur.close()
  
  >>> conn.close()
  
  寫在以後
  
  基本的知識差很少就是這些,固然確定不侷限於此。在實際的編程中咱們確定會遇到不少的問題,你們記得要多多去查閱官方文檔,學會解決問題。java

相關文章
相關標籤/搜索