Python中sqlite學習教程

來源:互聯網
上載者:User

標籤:pysqlite

       Python SQLITE資料庫是一款非常小巧的嵌入式開來源資料庫軟體,沒有獨立的維護進程,所有的維護都來自於程式本身。它使用一個檔案儲存體整個資料庫,操作十分方便。

       以下是重要的 sqlite3 模組程式,可以滿足您在 Python 程式中使用 SQLite 資料庫的需求。如果您需要瞭解更多細節,請查看 Python sqlite3 模組的官方文檔。

序號 API & 描述
1 sqlite3.connect(database [,timeout ,other optional arguments])

該 API 開啟一個到 SQLite 資料庫檔案 database 的連結。您可以使用 ":memory:" 來在 RAM 中開啟一個到 database 的資料庫連接,而不是在磁碟上開啟。如果資料庫成功開啟,則返回一個連線物件。

當一個資料庫被多個串連訪問,且其中一個修改了資料庫,此時 SQLite 資料庫被鎖定,直到事務提交。timeout 參數表示串連等待鎖定的期間,直到發生異常中斷連線。timeout 參數預設是 5.0(5 秒)。

如果給定的資料庫名稱 filename 不存在,則該調用將建立一個資料庫。如果您不想在目前的目錄中建立資料庫,那麼您可以指定帶有路徑的檔案名稱,這樣您就能在任意地方建立資料庫。

2 connection.cursor([cursorClass])

該常式建立一個 cursor,將在 Python 資料庫編程中用到。該方法接受一個單一的可選的參數 cursorClass。如果提供了該參數,則它必須是一個擴充自 sqlite3.Cursor 的自訂的 cursor 類。

3 cursor.execute(sql [, optional parameters])

該常式執行一個 SQL 陳述式。該 SQL 陳述式可以被參數化(即使用預留位置代替 SQL 文本)。sqlite3 模組支援兩種類型的預留位置:問好和命名預留位置(命名樣式)。

例如:cursor.execute("insert into people values (?, ?)", (who, age))

4 connection.execute(sql [, optional parameters])

該常式是上面執行的由游標(cursor)對象提供的方法的捷徑,它通過調用游標(cursor)方法建立了一個中間的游標對象,然後通過給定的參數調用游標的 execute 方法。

5 cursor.executemany(sql, seq_of_parameters)

該常式對 seq_of_parameters 中的所有參數或映射執行一個 SQL 命令。

6 connection.executemany(sql[, parameters])

該常式是一個由調用游標(cursor)方法建立的中間的游標對象的捷徑,然後通過給定的參數調用游標的 executemany 方法。

7 cursor.executescript(sql_script)

該常式一旦接收到指令碼,會執行多個 SQL 陳述式。它首先執行 COMMIT 語句,然後執行作為參數傳入的 SQL 指令碼。所有的 SQL 陳述式應該用分號(;)分隔。

8 connection.executescript(sql_script)

該常式是一個由調用游標(cursor)方法建立的中間的游標對象的捷徑,然後通過給定的參數調用游標的 executescript 方法。

9 connection.total_changes()

該常式返回自資料庫連接開啟以來被修改、插入或刪除的資料庫總行數。

10 connection.commit()

該方法提交當前的食物。如果您未調用該方法,那麼自您上一次調用 commit() 以來所做的任何動作對其他資料庫連接來說是不可見的。

11 connection.rollback()

該方法復原自上一次調用 commit() 以來對資料庫所做的更改。

12 connection.close()

該方法關閉資料庫連接。請注意,這不會自動調用 commit()。如果您之前未調用 commit() 方法,就直接關閉資料庫連接,您所做的所有更改將全部丟失!

13 cursor.fetchone()

該方法擷取查詢結果集中的下一行,返回一個單一的序列,當沒有更多可用的資料時,則返回 None。

14 cursor.fetchmany([size=cursor.arraysize])

該方法擷取查詢結果集中的下一行組,返回一個列表。當沒有更多的可用的行時,則返回一個空的列表。該方法嘗試擷取由 size 參數指定的儘可能多的行。

15 cursor.fetchall()

該常式擷取查詢結果集中所有(剩餘)的行,返回一個列表。當沒有可用的行時,則返回一個空的列表。

        Python 的資料庫模組有統一的介面標準,所以資料庫操作都有統一的模式,基本上都是下面幾步(假設資料庫模組名為db):

        1)用db.connect建立資料庫連接,假設連線物件為conn
        2)如果該資料庫操作不需要返回結果,就直接用conn.execute查詢,根據資料庫交易隔離等級的不同,可能修改資料庫需要conn.commit
        3)如果需要返回查詢結果則用conn.cursor建立遊標對象cur, 通過cur.execute查詢資料庫,用cur.fetchall/cur.fetchone/cur.fetchmany返回查詢結果。根據資料庫事 務隔離等級的不同,可能修改資料庫需要conn.commit
        4)關閉cur, conn

        下面我們以上面的介紹的步驟來介紹sqlite的使用。

        1)匯入sqlite3模組,如:

>>> import sqlite3
        2)建立資料庫/開啟資料庫

        建立或開啟資料,如下:

>>> import sqlite3 as sqlite>>> conn = sqlite.connect("D:/test.db")

上面的命令開啟D:/test.db的資料庫檔案,如果指定的資料庫存在就直接開啟這個資料庫,如果不存在就新建立一個再開啟,並返回資料庫連接對象conn,該對象主要有以下操作:

  • commit(): 事務提交 
  • rollback(): 交易回復 
  • close(): 關閉一個資料庫連接 
  • cursor(): 建立一個遊標 
connect的完整形式如:

connect(database[, timeout, isolation_level, detect_types, factory])
       其中,commit()方法用於提交事務,rollback()方法用於復原至上次調用commit()方法的地方。可以通過Connection.isolation_level定義交易隔離等級,當該屬性設定成None時,它會自動認可事務,不需要顯式地調用commit()方法。

        除了直接指定資料庫檔案之外,還有一種方法是在記憶體中建立資料庫。方法是將":memory:"作為參數傳遞給sqlite.connect()函數:

conn = sqlite3.connect(":memory:")
      如果不需要返回結果,則可以直接使用conn.execute( )進行資料操作,如下,建立一個資料庫表user:

conn.execute("create table user(uid int primary key not null, name text not null, password text not null, age int)")
      如果需要返回結果,則繼續看下面的遊標對象。

      3)建立遊標對象

>>> cur = conn.cursor()
       遊標對象有以下的操作:

  • execute()--執行sql語句
  • executemany--執行多條sql語句   
  • close()--關閉遊標  
  • fetchone()--從結果中取一條記錄,並將遊標指向下一條記錄   
  • fetchmany()--從結果中取多條記錄   
  • fetchall()--從結果中取出所有記錄   
       如進行插入操作:
>>> cur.execute("insert into user(uid,name, password,age)values(1,'John','123',12)")<sqlite3.Cursor object at 0x02A8A0A0>>>> cur.execute("insert into user(uid,name, password,age)values(2,'Kate','123',12)")
   現在查詢看下剛才插入的資料:
>>> cur.execute("select* from user")<sqlite3.Cursor object at 0x02A8A0A0>>>> print(cur.fetchone())(1, u'John', u'123', 12)>>> print(cur.fetchall())[(2, u'Kate', u'123', 12)]>>> print(cur.fetchall())[]>>> cur.execute("select* from user")<sqlite3.Cursor object at 0x02A8A0A0>>>> print(cur.fetchall())[(1, u'John', u'123', 12), (2, u'Kate', u'123', 12)]>>> 
      從上面的代碼可以看到,採用fetchone( )每次取出一條資料,並且指向下一個資料,而fetchall( )取出所有的資料,並指向末尾。當然,還有修改操作:
>>> cur.execute("update user set age =15 where uid =1")<sqlite3.Cursor object at 0x02A8A0A0>>>> cur.execute("select* from user where uid =1")<sqlite3.Cursor object at 0x02A8A0A0>>>> print(cur.fetchall())[(1, u'John', u'123', 15)]>>> 
刪除操作:
>>> cur.execute("delete from user where uid =1")<sqlite3.Cursor object at 0x02A8A0A0>>>> 
      除了上面顯示的cur=conn.curson()建立右邊對象對象外,其實可以直接conn.ececute( )返回的遊標對象,如:
>>> cur = conn.execute("select* from user")>>> print(cur.fetchall())[(1, u'test', u'124', 16)]>>> 
       遊標對象取多多條記錄fetchmany( ):
>>> cur = conn.execute("select* from user")>>> print(cur.fetchmany(3))[(1, u'test', u'124', 16), (2, u'test2', u'124', 18), (3, u'test3', u'124', 20)]>>> 
       下面,我們將Python中的sqlite操作封裝成一個類,如下:
class sqlitehelper:    def __init__(self, db):        self.db = db        try:            self.conn = sqlite.connect(db)            self.cur = self.conn.cursor()        except sqlite.Error,e:            print("connect "+db+" failed:"+e.reason)            return              def __del__(self):        self.conn.close()    def execute(self,sql):        self.cur.execute(sql)        return self.cur    def select(self, sql):        self.cur.execute(sql)        return self.cur    def insert(self, sql):        self.cur.execute(sql)        return self.cur    def delete(self, sql):        self.cur.execute(sql)        return self.cur    def update(self, sql):        self.cur.execute(sql)        return self.cur

參考資料:

1、python之sqlite3使用詳解  

2、sqlite3 — DB-API 2.0 interface for SQLite databases

3、Python sqlite3 模組 API

Python中sqlite學習教程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.