鍍金池/ 教程/ 數(shù)據(jù)庫/ SQLite – Python
SQLite Having 子句
SQLite 運(yùn)算符
SQLite 注入
SQLite Delete 語句
SQLite – Python
SQLite 數(shù)據(jù)類型
SQLite 簡介
SQLite 創(chuàng)建數(shù)據(jù)庫
SQLite Vacuum
SQLite Group By
SQLite 日期 & 時間
SQLite AND/OR 運(yùn)算符
SQLite 刪除表
SQLite Distinct
SQLite Alter 命令
SQLite PRAGMA
SQLite 約束
SQLite 創(chuàng)建表
SQLite Like 子句
SQLite Limit 子句
SQLite Autoincrement
SQLite 子查詢
SQLite – C/C++
SQLite – PHP
SQLite 命令
SQLite Order By
SQLite Select 語句
SQLite Unions 子句
SQLite – Perl
SQLite – Java
SQLite 別名
SQLite 常用函數(shù)
SQLite Explain(解釋)
SQLite NULL 值
SQLite Glob 子句
SQLite 表達(dá)式
SQLite 視圖
SQLite Where 子句
SQLite Truncate Table
SQLite 索引
SQLite Insert 語句
SQLite 安裝
SQLite Indexed By
SQLite 分離數(shù)據(jù)庫
SQLite 觸發(fā)器
SQLite 語法
SQLite Joins
SQLite Update 語句
SQLite 附加數(shù)據(jù)庫
SQLite 事務(wù)

SQLite – Python

安裝

SQLite3 可使用 sqlite3 模塊與 Python 進(jìn)行集成。sqlite3 模塊是由 Gerhard Haring 編寫的。它提供了一個與 PEP 249 描述的 DB-API 2.0 規(guī)范兼容的 SQL 接口。您不需要單獨(dú)安裝該模塊,因為 Python 2.5.x 以上版本默認(rèn)自帶了該模塊。

為了使用 sqlite3 模塊,您首先必須創(chuàng)建一個表示數(shù)據(jù)庫的連接對象,然后您可以有選擇地創(chuàng)建光標(biāo)對象,這將幫助您執(zhí)行所有的 SQL 語句。

Python sqlite3 模塊 API

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

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

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

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

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

2connection.cursor([cursorClass])

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

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

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

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

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

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

5cursor.executemany(sql, seq_of_parameters)

該例程對 seq_of_parameters 中的所有參數(shù)或映射執(zhí)行一個 SQL 命令。

6connection.executemany(sql[, parameters])

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

7cursor.executescript(sql_script)

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

8connection.executescript(sql_script)

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

9connection.total_changes()

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

10connection.commit()

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

11connection.rollback()

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

12connection.close()

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

13cursor.fetchone()

該方法獲取查詢結(jié)果集中的下一行,返回一個單一的序列,當(dāng)沒有更多可用的數(shù)據(jù)時,則返回 None。

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

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

15cursor.fetchall()

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

連接數(shù)據(jù)庫

下面的 Python 代碼顯示了如何連接到一個現(xiàn)有的數(shù)據(jù)庫。如果數(shù)據(jù)庫不存在,那么它就會被創(chuàng)建,最后將返回一個數(shù)據(jù)庫對象。

    #!/usr/bin/python

    import sqlite3

    conn = sqlite3.connect('test.db')

    print "Opened database successfully";

在這里,您也可以把數(shù)據(jù)庫名稱復(fù)制為特定的名稱 :memory:,這樣就會在 RAM 中創(chuàng)建一個數(shù)據(jù)庫?,F(xiàn)在,讓我們來運(yùn)行上面的程序,在當(dāng)前目錄中創(chuàng)建我們的數(shù)據(jù)庫 test.db。您可以根據(jù)需要改變路徑。保存上面代碼到 sqlite.py 文件中,并按如下所示執(zhí)行。如果數(shù)據(jù)庫成功創(chuàng)建,那么會顯示下面所示的消息:

    $chmod +x sqlite.py
    $./sqlite.py
    Open database successfully

創(chuàng)建表

下面的 Python 代碼段將用于在先前創(chuàng)建的數(shù)據(jù)庫中創(chuàng)建一個表:

    #!/usr/bin/python

    import sqlite3

    conn = sqlite3.connect('test.db')
    print "Opened database successfully";

    conn.execute('''CREATE TABLE COMPANY
           (ID INT PRIMARY KEY     NOT NULL,
           NAME           TEXT    NOT NULL,
           AGE            INT     NOT NULL,
           ADDRESS        CHAR(50),
           SALARY         REAL);''')
    print "Table created successfully";

    conn.close()

上述程序執(zhí)行時,它會在 test.db 中創(chuàng)建 COMPANY 表,并顯示下面所示的消息:

    Opened database successfully
    Table created successfully

INSERT 操作

下面的 Python 程序顯示了如何在上面創(chuàng)建的 COMPANY 表中創(chuàng)建記錄:

    #!/usr/bin/python

    import sqlite3

    conn = sqlite3.connect('test.db')
    print "Opened database successfully";

    conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
          VALUES (1, 'Paul', 32, 'California', 20000.00 )");

    conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
          VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

    conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
          VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

    conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
          VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

    conn.commit()
    print "Records created successfully";
    conn.close()

上述程序執(zhí)行時,它會在 COMPANY 表中創(chuàng)建給定記錄,并會顯示以下兩行:

    Opened database successfully
    Records created successfully

SELECT 操作

下面的 Python 程序顯示了如何從前面創(chuàng)建的 COMPANY 表中獲取并顯示記錄:

    #!/usr/bin/python

    import sqlite3

    conn = sqlite3.connect('test.db')
    print "Opened database successfully";

    cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
    for row in cursor:
       print "ID = ", row[0]
       print "NAME = ", row[1]
       print "ADDRESS = ", row[2]
       print "SALARY = ", row[3], "n"

    print "Operation done successfully";
    conn.close()

上述程序執(zhí)行時,它會產(chǎn)生以下結(jié)果:

    Opened database successfully
    ID =  1
    NAME =  Paul
    ADDRESS =  California
    SALARY =  20000.0

    ID =  2
    NAME =  Allen
    ADDRESS =  Texas
    SALARY =  15000.0

    ID =  3
    NAME =  Teddy
    ADDRESS =  Norway
    SALARY =  20000.0

    ID =  4
    NAME =  Mark
    ADDRESS =  Rich-Mond
    SALARY =  65000.0

    Operation done successfully

UPDATE 操作

下面的 Python 代碼顯示了如何使用 UPDATE 語句來更新任何記錄,然后從 COMPANY 表中獲取并顯示更新的記錄:

    #!/usr/bin/python

    import sqlite3

    conn = sqlite3.connect('test.db')
    print "Opened database successfully";

    conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
    conn.commit
    print "Total number of rows updated :", conn.total_changes

    cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
    for row in cursor:
       print "ID = ", row[0]
       print "NAME = ", row[1]
       print "ADDRESS = ", row[2]
       print "SALARY = ", row[3], "n"

    print "Operation done successfully";
    conn.close()

上述程序執(zhí)行時,它會產(chǎn)生以下結(jié)果:

    Opened database successfully
    Total number of rows updated : 1
    ID =  1
    NAME =  Paul
    ADDRESS =  California
    SALARY =  25000.0

    ID =  2
    NAME =  Allen
    ADDRESS =  Texas
    SALARY =  15000.0

    ID =  3
    NAME =  Teddy
    ADDRESS =  Norway
    SALARY =  20000.0

    ID =  4
    NAME =  Mark
    ADDRESS =  Rich-Mond
    SALARY =  65000.0

    Operation done successfully

DELETE 操作

下面的 Python 代碼顯示了如何使用 DELETE 語句刪除任何記錄,然后從 COMPANY 表中獲取并顯示剩余的記錄:

    #!/usr/bin/python

    import sqlite3

    conn = sqlite3.connect('test.db')
    print "Opened database successfully";

    conn.execute("DELETE from COMPANY where ID=2;")
    conn.commit
    print "Total number of rows deleted :", conn.total_changes

    cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
    for row in cursor:
       print "ID = ", row[0]
       print "NAME = ", row[1]
       print "ADDRESS = ", row[2]
       print "SALARY = ", row[3], "n"

    print "Operation done successfully";
    conn.close()

上述程序執(zhí)行時,它會產(chǎn)生以下結(jié)果:

    Opened database successfully
    Total number of rows deleted : 1
    ID =  1
    NAME =  Paul
    ADDRESS =  California
    SALARY =  20000.0

    ID =  3
    NAME =  Teddy
    ADDRESS =  Norway
    SALARY =  20000.0

    ID =  4
    NAME =  Mark
    ADDRESS =  Rich-Mond
    SALARY =  65000.0

    Operation done successfully