訪問數(shù)據(jù)庫

使用SQLite

SQLite是一種嵌入式數(shù)據(jù)庫,它的數(shù)據(jù)庫就是一個文件。由于SQLite本身是C寫的,而且體積很小,所以,經(jīng)常被集成到各種應(yīng)用程序中,甚至在iOS和Android的App中都可以集成。
Python就內(nèi)置了SQLite3,所以,在Python中使用SQLite,不需要安裝任何東西,直接使用。
要操作關(guān)系數(shù)據(jù)庫,首先需要連接到數(shù)據(jù)庫,一個數(shù)據(jù)庫連接稱為Connection;
連接到數(shù)據(jù)庫后,需要打開游標,稱之為Cursor,通過Cursor執(zhí)行SQL語句,然后,獲得執(zhí)行結(jié)果。
Python定義了一套操作數(shù)據(jù)庫的API接口,任何數(shù)據(jù)庫要連接到Python,只需要提供符合Python標準的數(shù)據(jù)庫驅(qū)動即可。
由于SQLite的驅(qū)動內(nèi)置在Python標準庫中,所以我們可以直接來操作SQLite數(shù)據(jù)庫。
我們在Python交互式命令行實踐一下:

# 導(dǎo)入SQLite驅(qū)動:
>>> import sqlite3
# 連接到SQLite數(shù)據(jù)庫
# 數(shù)據(jù)庫文件是test.db
# 如果文件不存在,會自動在當前目錄創(chuàng)建:
>>> conn = sqlite3.connect('test.db')
# 創(chuàng)建一個Cursor:
>>> cursor = conn.cursor()
# 執(zhí)行一條SQL語句,創(chuàng)建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
<sqlite3.Cursor object at 0x10f8aa260>
# 繼續(xù)執(zhí)行一條SQL語句,插入一條記錄:
>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
<sqlite3.Cursor object at 0x10f8aa260>
# 通過rowcount獲得插入的行數(shù):
>>> cursor.rowcount
1
# 關(guān)閉Cursor:
>>> cursor.close()
# 提交事務(wù):
>>> conn.commit()
# 關(guān)閉Connection:
>>> conn.close()

我們再試試查詢記錄:

>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
# 執(zhí)行查詢語句:
>>> cursor.execute('select * from user where id=?', ('1',))
<sqlite3.Cursor object at 0x10f8aa340>
# 獲得查詢結(jié)果集:
>>> values = cursor.fetchall()
>>> values
[('1', 'Michael')]
>>> cursor.close()
>>> conn.close()

使用Python的DB-API時,只要搞清楚ConnectionCursor對象,打開后一定記得關(guān)閉,就可以放心地使用。
使用Cursor對象執(zhí)行insert,update,delete語句時,執(zhí)行結(jié)果由rowcount返回影響的行數(shù),就可以拿到執(zhí)行結(jié)果。
使用Cursor對象執(zhí)行select語句時,通過featchall()可以拿到結(jié)果集。結(jié)果集是一個list,每個元素都是一個tuple,對應(yīng)一行記錄。
如果SQL語句帶有參數(shù),那么需要把參數(shù)按照位置傳遞給execute()方法,有幾個?占位符就必須對應(yīng)幾個參數(shù),例如:

cursor.execute('select * from user where name=? and pwd=?', ('abc', 'password'))

使用MySQL

演示如何連接到MySQL服務(wù)器的test數(shù)據(jù)庫:

# 導(dǎo)入MySQL驅(qū)動:
>>> import mysql.connector
# 注意把password設(shè)為你的root口令:
>>> conn = mysql.connector.connect(user='root', password='password', database='test')
>>> cursor = conn.cursor()
# 創(chuàng)建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
# 提交事務(wù):
>>> conn.commit()
>>> cursor.close()
# 運行查詢:
>>> cursor = conn.cursor()
>>> cursor.execute('select * from user where id = %s', ('1',))
>>> values = cursor.fetchall()
>>> values
[('1', 'Michael')]
# 關(guān)閉Cursor和Connection:
>>> cursor.close()
True
>>> conn.close()

使用SQLAlchemy

這就是傳說中的ORM技術(shù):Object-Relational Mapping,把關(guān)系數(shù)據(jù)庫的表結(jié)構(gòu)映射到對象上。是不是很簡單?
但是由誰來做這個轉(zhuǎn)換呢?所以O(shè)RM框架應(yīng)運而生。
在Python中,最有名的ORM框架是SQLAlchemy。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容