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

使用SQLite

SQLite是一種嵌入式數(shù)據(jù)庫,它的數(shù)據(jù)庫就是一個(gè)文件。由于SQLite本身是C寫的芥吟,而且體積很小,所以专甩,經(jīng)常被集成到各種應(yīng)用程序中钟鸵,甚至在iOS和Android的App中都可以集成。
Python就內(nèi)置了SQLite3涤躲,所以携添,在Python中使用SQLite,不需要安裝任何東西篓叶,直接使用烈掠。
在使用SQLite前,我們先要搞清楚幾個(gè)概念:
表是數(shù)據(jù)庫中存放關(guān)系數(shù)據(jù)的集合缸托,一個(gè)數(shù)據(jù)庫里面通常都包含多個(gè)表左敌,比如學(xué)生的表,班級的表俐镐,學(xué)校的表矫限,等等。表和表之間通過外鍵關(guān)聯(lián)。
要操作關(guān)系數(shù)據(jù)庫叼风,首先需要連接到數(shù)據(jù)庫取董,一個(gè)數(shù)據(jù)庫連接稱為Connection;
連接到數(shù)據(jù)庫后,需要打開游標(biāo),稱之為Cursor褪贵,通過Cursor執(zhí)行SQL語句笼痛,然后,獲得執(zhí)行結(jié)果。
Python定義了一套操作數(shù)據(jù)庫的API接口,任何數(shù)據(jù)庫要連接到Python,只需要提供符合Python標(biāo)準(zhǔn)的數(shù)據(jù)庫驅(qū)動(dòng)即可豆胸。
由于SQLite的驅(qū)動(dòng)內(nèi)置在Python標(biāo)準(zhǔn)庫中,所以我們可以直接來操作SQLite數(shù)據(jù)庫巷疼。
我們在Python交互式命令行實(shí)踐一下:

導(dǎo)入SQLite驅(qū)動(dòng):

import sqlite3

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

數(shù)據(jù)庫文件是test.db

如果文件不存在晚胡,會(huì)自動(dòng)在當(dāng)前目錄創(chuàng)建:

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

創(chuàng)建一個(gè)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
[(u'1', u'Michael')]
cursor.close()
conn.close()

安裝MySQL驅(qū)動(dòng)

由于MySQL服務(wù)器以獨(dú)立的進(jìn)程運(yùn)行估盘,并通過網(wǎng)絡(luò)對外服務(wù),所以伏尼,需要支持Python的MySQL驅(qū)動(dòng)來連接到MySQL服務(wù)器忿檩。
目前,有兩個(gè)MySQL驅(qū)動(dòng):

  • mysql-connector-python:是MySQL官方的純Python驅(qū)動(dòng)爆阶;
  • MySQL-python:是封裝了MySQL C驅(qū)動(dòng)的Python驅(qū)動(dòng)燥透。
    可以把兩個(gè)都裝上,使用的時(shí)候再?zèng)Q定用哪個(gè):
    $ easy_install mysql-connector-python
    $ easy_install MySQL-python
    我們以mysql-connector-python為例辨图,演示如何連接到MySQL服務(wù)器的test數(shù)據(jù)庫:

導(dǎo)入MySQL驅(qū)動(dòng):

import mysql.connector

注意把password設(shè)為你的root口令:

conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True)
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()

運(yùn)行查詢:

cursor = conn.cursor()
cursor.execute('select * from user where id = %s', ('1',))
values = cursor.fetchall()
values
[(u'1', u'Michael')]

關(guān)閉Cursor和Connection:

cursor.close()
True
conn.close()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市故河,隨后出現(xiàn)的幾起案子吱韭,更是在濱河造成了極大的恐慌,老刑警劉巖鱼的,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件理盆,死亡現(xiàn)場離奇詭異,居然都是意外死亡凑阶,警方通過查閱死者的電腦和手機(jī)猿规,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宙橱,“玉大人姨俩,你說我怎么就攤上這事蘸拔。” “怎么了环葵?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵调窍,是天一觀的道長。 經(jīng)常有香客問我张遭,道長邓萨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任帝璧,我火速辦了婚禮先誉,結(jié)果婚禮上湿刽,老公的妹妹穿的比我還像新娘的烁。我一直安慰自己,他們只是感情好诈闺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布渴庆。 她就那樣靜靜地躺著,像睡著了一般雅镊。 火紅的嫁衣襯著肌膚如雪襟雷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天仁烹,我揣著相機(jī)與錄音耸弄,去河邊找鬼。 笑死卓缰,一個(gè)胖子當(dāng)著我的面吹牛计呈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播征唬,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼捌显,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了总寒?” 一聲冷哼從身側(cè)響起扶歪,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摄闸,沒想到半個(gè)月后善镰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡年枕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年炫欺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片画切。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竣稽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毫别,我是刑警寧澤娃弓,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站岛宦,受9級特大地震影響台丛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砾肺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一挽霉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧变汪,春花似錦侠坎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至番官,卻和暖如春庐完,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徘熔。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工门躯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酷师。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓讶凉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窒升。 傳聞我的和親對象是個(gè)殘疾皇子缀遍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容