注意:
本文摘錄自《Python高效開發實戰:Django,Tornado,Flask,Twisted》
作者:劉長龍 出版社:電子工業出版社
SQL標準統一了數據庫語言,但是通過Python,Java,C++等高級語言操作數據庫時需要連接每個數據庫獨特的數據庫引擎,之後才能用SQL語言對數據庫進行操作。因此,在Python中操作不同的數據庫需要引入不同的數據庫包。
所有的Python的數據庫引擎都遵守DB-API規範,此規範使引用數據庫引擎後的編程方法大致相同,Python數據庫編程的步驟如下。
- 引入Python引擎包:如import MySQLdb語句用於爲MySQL操作做準備
- 連接數據庫:使用引擎包中的connect方法連接物理數據庫,通常在本步驟需要輸入數據庫的IP地址,端口,數據庫名,用戶名及密碼等。對於SQLite和Excel等文件數據庫,本步驟中要給出文件名。
- 獲取遊標:在DB-API規範中,遊標(cursor)用於執行SQL語句並且管理查詢到的數據集。
- 執行SQL命令:將SQL命令傳給遊標執行,並解析返回的結果。本步驟可以多次進行。
- 提交或者回滾事務:在執行DML【數據操作語言】類的SQL語句時,數據庫引擎會自動啓動新事務,在一系列的操作完成之後,可以提交或回滾當前事務。
- 關閉遊標:完成SQL操作後關閉遊標
- 關閉數據庫連接:關閉Python客戶端和數據庫服務器的連接
SQLite3操作示例
'''
Created on 2018年8月11日
@author: Freedom
'''
import sqlite3
conn = sqlite3.connect("test.db")
#獲取遊標對象
cur = conn.cursor()
#執行一系列SQL語句
#建立一個表
cur.execute("CREATE TABLE demo(num int,str varchar(20));")
#插入一些記錄
cur.execute("INSERT INTO demo VALUES (%d, '%s')" % (1, 'aaa'))
cur.execute("INSERT INTO demo VALUES (%d, '%s')" % (2, 'bbb'))
cur.execute("INSERT INTO demo VALUES (%d, '%s')" % (3, 'ccc'))
#更新一條記錄
cur.execute("UPDATE demo SET str='%s' WHERE num = %d" % ('ddd', 3) )
#查詢
cur.execute("SELECT * FROM demo;")
rows = cur.fetchall() # fetch all
print("number of records: %d" % len(rows))
for i in rows:
print(i)
#提交事務
conn.commit()
#關閉遊標對象
cur.close()
#關閉數據庫連接
conn.close()
結果如下
number of records: 3
(1, 'aaa')
(2, 'bbb')
(3, 'ddd')