Python中sqlite學習教程

jopen 9年前發布 | 26K 次閱讀 SQLite Python開發

       Python SQLITE數據庫是一款非常小巧的嵌入式開源數據庫軟件,沒有獨立的維護進程,所有的維護都來自于程序本身。它使用一個文件存儲整個數據庫,操作十分方便。

       以下是重要的 sqlite3 模塊程序,可以滿足您在 Python 程序中使用 SQLite 數據庫的需求。如果您需要了解更多細節,請查看 Python sqlite3 模塊的官方文檔。

</tr>

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

該 API 打開一個到 SQLite 數據庫文件 database 的鏈接。您可以使用 ":memory:" 來在 RAM 中打開一個到 database 的數據庫連接,而不是在磁盤上打開。如果數據庫成功打開,則返回一個連接對象。

當一個數據庫被多個連接訪問,且其中一個修改了數據庫,此時 SQLite 數據庫被鎖定,直到事務提交。timeout 參數表示連接等待鎖定的持續時間,直到發生異常斷開連接。timeout 參數默認是 5.0(5 秒)。

如果給定的數據庫名稱 filename 不存在,則該調用將創建一個數據庫。如果您不想在當前目錄中創建數據庫,那么您可以指定帶有路徑的文件名,這樣您就能在任意地方創建數據庫。

</td> </tr>

2 connection.cursor([cursorClass])

該例程創建一個 cursor,將在 Python 數據庫編程中用到。該方法接受一個單一的可選的參數 cursorClass。如果提供了該參數,則它必須是一個擴展自 sqlite3.Cursor 的自定義的 cursor 類。

</td> </tr>

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

該例程執行一個 SQL 語句。該 SQL 語句可以被參數化(即使用占位符代替 SQL 文本)。sqlite3 模塊支持兩種類型的占位符:問好和命名占位符(命名樣式)。

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

</td> </tr>

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

該例程是上面執行的由光標(cursor)對象提供的方法的快捷方式,它通過調用光標(cursor)方法創建了一個中間的光標對象,然后通過給定的參數調用光標的 execute 方法。

</td> </tr>

5 cursor.executemany(sql, seq_of_parameters)

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

</td> </tr>

6 connection.executemany(sql[, parameters])

該例程是一個由調用光標(cursor)方法創建的中間的光標對象的快捷方式,然后通過給定的參數調用光標的 executemany 方法。

</td> </tr>

7 cursor.executescript(sql_script)

該例程一旦接收到腳本,會執行多個 SQL 語句。它首先執行 COMMIT 語句,然后執行作為參數傳入的 SQL 腳本。所有的 SQL 語句應該用分號(;)分隔。

</td> </tr>

8 connection.executescript(sql_script)

該例程是一個由調用光標(cursor)方法創建的中間的光標對象的快捷方式,然后通過給定的參數調用光標的 executescript 方法。

</td> </tr>

9 connection.total_changes()

該例程返回自數據庫連接打開以來被修改、插入或刪除的數據庫總行數。

</td> </tr>

10 connection.commit()

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

</td> </tr>

11 connection.rollback()

該方法回滾自上一次調用 commit() 以來對數據庫所做的更改。

</td> </tr>

12 connection.close()

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

</td> </tr>

13 cursor.fetchone()

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

</td> </tr>

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

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

</td> </tr>

15 cursor.fetchall()

該例程獲取查詢結果集中所有(剩余)的行,返回一個列表。當沒有可用的行時,則返回一個空的列表。

</td> </tr> </tbody> </table> </p>

        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(): 創建一個游標 
  • </ul>

    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()
           游標對象有以下的操作:



  • sesese色