使用SQLite
SQLite是一種嵌入式數據庫,它的數據庫就是一個文件。由于SQLite本身是C寫的,而且體積很小,所以,經常被集成到各種應用程序中,甚至在iOS和Android的App中都可以集成。
Python就內置了SQLite3,所以,在Python中使用SQLite,不需要安裝任何東西,直接使用。
在使用SQLite前,我們先要搞清楚幾個概念:
表是數據庫中存放關系數據的集合,一個數據庫里面通常都包含多個表,比如學生的表,班級的表,學校的表,等等。表和表之間通過外鍵關聯。
要操作關系數據庫,首先需要連接到數據庫,一個數據庫連接稱為Connection;
連接到數據庫后,需要打開游標,稱之為Cursor,通過Cursor執行SQL語句,然后,獲得執行結果。
Python定義了一套操作數據庫的API接口,任何數據庫要連接到Python,只需要提供符合Python標準的數據庫驅動即可。
由于SQLite的驅動內置在Python標準庫中,所以我們可以直接來操作SQLite數據庫。
我們在Python交互式命令行實踐一下:
導入SQLite驅動:
import sqlite3
連接到SQLite數據庫
數據庫文件是test.db
如果文件不存在,會自動在當前目錄創建:
conn = sqlite3.connect('test.db')
創建一個Cursor:
cursor = conn.cursor()
執行一條SQL語句,創建user表:
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
<sqlite3.Cursor object at 0x10f8aa260>
繼續執行一條SQL語句,插入一條記錄:
cursor.execute('insert into user (id, name) values ('1', 'Michael')')
<sqlite3.Cursor object at 0x10f8aa260>
通過rowcount獲得插入的行數:
cursor.rowcount
1
關閉Cursor:
cursor.close()
提交事務:
conn.commit()
關閉Connection:
conn.close()
我們再試試查詢記錄:
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
執行查詢語句:
cursor.execute('select * from user where id=?', ('1',))
<sqlite3.Cursor object at 0x10f8aa340>
獲得查詢結果集:
values = cursor.fetchall()
values
[(u'1', u'Michael')]
cursor.close()
conn.close()
安裝MySQL驅動
由于MySQL服務器以獨立的進程運行,并通過網絡對外服務,所以,需要支持Python的MySQL驅動來連接到MySQL服務器。
目前,有兩個MySQL驅動:
- mysql-connector-python:是MySQL官方的純Python驅動;
- MySQL-python:是封裝了MySQL C驅動的Python驅動。
可以把兩個都裝上,使用的時候再決定用哪個:
$ easy_install mysql-connector-python
$ easy_install MySQL-python
我們以mysql-connector-python為例,演示如何連接到MySQL服務器的test數據庫:
導入MySQL驅動:
import mysql.connector
注意把password設為你的root口令:
conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True)
cursor = conn.cursor()
創建user表:
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
插入一行記錄,注意MySQL的占位符是%s:
cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
cursor.rowcount
1
提交事務:
conn.commit()
cursor.close()
運行查詢:
cursor = conn.cursor()
cursor.execute('select * from user where id = %s', ('1',))
values = cursor.fetchall()
values
[(u'1', u'Michael')]
關閉Cursor和Connection:
cursor.close()
True
conn.close()