Python中sqlite學習教程
Python SQLITE數據庫是一款非常小巧的嵌入式開源數據庫軟件,沒有獨立的維護進程,所有的維護都來自于程序本身。它使用一個文件存儲整個數據庫,操作十分方便。
以下是重要的 sqlite3 模塊程序,可以滿足您在 Python 程序中使用 SQLite 數據庫的需求。如果您需要了解更多細節,請查看 Python sqlite3 模塊的官方文檔。
序號 | API & 描述 | </tr>|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
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 下面我們以上面的介紹的步驟來介紹sqlite的使用。 1)導入sqlite3模塊,如: >>> import sqlite32)創建數據庫/打開數據庫
創建或打開數據,如下: >>> import sqlite3 as sqlite >>> conn = sqlite.connect("D:/test.db")
上面的命令打開D:/test.db的數據庫文件,如果指定的數據庫存在就直接打開這個數據庫,如果不存在就新創建一個再打開,并返回數據庫連接對象conn,該對象主要有以下操作:
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()游標對象有以下的操作:
如進行插入操作:
>>> 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 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
相關經驗相關資訊 |