利用Python訪問MySQL數(shù)據(jù)庫_第1頁
利用Python訪問MySQL數(shù)據(jù)庫_第2頁
利用Python訪問MySQL數(shù)據(jù)庫_第3頁
利用Python訪問MySQL數(shù)據(jù)庫_第4頁
利用Python訪問MySQL數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、課程論文(python)論文題目: 利用python訪問mysql數(shù)據(jù)庫 學(xué)生姓名: 強(qiáng)銳 學(xué) 號: 201071050120 專 業(yè): 網(wǎng)絡(luò)與信息安全 班 級: 10級網(wǎng)絡(luò)一班 指導(dǎo)老師: 程旺虎 利用python訪問mysql數(shù)據(jù)庫作者:強(qiáng)銳(西北師范大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院)摘 要: 本文講解了應(yīng)用python如何訪問mysql數(shù)據(jù)庫。首先介紹了python、mysql ,然后講解mysql數(shù)據(jù)庫訪問模塊,并通過一個實(shí)例來說明應(yīng)用該模塊來訪問mysql數(shù)據(jù)庫,最后總結(jié)了用python訪問mysql 數(shù)據(jù)庫的優(yōu)點(diǎn)。關(guān)鍵詞: python; mysql; mysqldb; 數(shù)據(jù)庫1 pyt

2、hon1.1 概述python 的創(chuàng)始人為guido van rossum,它是一種簡單易學(xué),功能強(qiáng)大的編程語言。它有高效率的高層數(shù)據(jù)結(jié)構(gòu),簡單而有效地實(shí)現(xiàn)面向?qū)ο缶幊?。python 簡潔的語法和對動態(tài)輸入的支持,再加上解釋性語言的本質(zhì),使得它在大多數(shù)平臺上的許多領(lǐng)域都是一個理想的腳本語言,特別適用于快速的應(yīng)用程序開發(fā)。1.2 特點(diǎn)(1) 簡單,易學(xué)python 是一種代表簡單主義思想的語言。閱讀一個良好的python 程序就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴(yán)格!python 的這種偽代碼本質(zhì)是它最大的優(yōu)點(diǎn)之一。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身。 python 極其容

3、易上手,其語法極其簡單。(2) 免費(fèi)、開源python 是floss (自由/開放源碼軟件) 之一。簡單地說,用戶可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。floss 是基于一個團(tuán)體分享知識的概念。這是為什么python 如此優(yōu)秀的原因之一它是由一群希望看到一個更加優(yōu)秀的 python 的人創(chuàng)造并經(jīng)常改進(jìn)著的。(3) 可移植性由于它的開源本質(zhì),python 已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)。如果小心地避免使用依賴于系統(tǒng)的特性,那么所有python 程序無需修改就可以在下述任何平臺上面運(yùn)行。這些平臺包括linux、wind

4、ows、freebsd、macintosh、solaris、os/2、amiga、aros、as/400、beos、os/390、z/os、palm os、qnx、vms、psion、acom risc os、vxworks、playstation、sharp zaurus、windows ce 甚至還有pocketpc.(4) 解釋性python 語言寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運(yùn)行程序。在計(jì)算機(jī)內(nèi)部,python 解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語言并運(yùn)行。事實(shí)上,由于不再需要擔(dān)心如何編譯程序、如何確保連接轉(zhuǎn)載正確的庫等等,所有

5、這一切使得使用python更加簡單。由于只需要把python 程序拷貝到另外一臺計(jì)算機(jī)上,它就可以工作了,這也使得python 程序更加易于移植。(5) 面向?qū)ο髉ython 既支持面向過程的編程也支持面向?qū)ο蟮木幊獭T诿嫦蜻^程的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在面向?qū)ο蟮恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。與其他主要的語言如c+和java 相比,python 以一種非常強(qiáng)大又簡單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭#?) 可擴(kuò)展性如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,可以把部分程序用c 或c+編寫,然后在python 程序中使用它們。(7) 可嵌入

6、性可以把python 嵌入c/c+程序,從而向程序用戶提供腳本功能。(8) 豐富的庫python 標(biāo)準(zhǔn)庫確實(shí)很龐大。它可以幫助處理各種工作,包括正則表達(dá)式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、cgi、ftp、電子郵件、xml、xml -rpc、html、wav 文件、密碼系統(tǒng)、gui (圖形用戶界面)、tk 和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了python,所有這些功能都是可用的,這被稱作python 的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxpython、twisted 和python 圖像庫等等。1.3 python中的異常異常是指程序中的例外,違例情

7、況。異常機(jī)制是指程序出現(xiàn)錯誤后,程序的處理方法。當(dāng)出現(xiàn)錯誤后,程序的執(zhí)行流程發(fā)生改變,程序的控制權(quán)轉(zhuǎn)移到異常處理。exception類是常用的異常類,該類包括standarderror,stopiteration, generatorexit, warning等異常類。standarderror類是python中的錯誤異常,如果程序上出現(xiàn)邏輯錯誤, 將引發(fā)該異常。standarderror類是所有內(nèi)斂異常的基類,放置在默認(rèn)的命名空間中,因此使用ioeroor,eoferror, importerror等類,不需要導(dǎo)入exception模塊。stopiteration類判斷循環(huán)是否執(zhí)行到尾部,如

8、果循環(huán)到尾部,則拋出該異常。generatorexit類是由generator函數(shù)引發(fā)的異常,當(dāng)調(diào)用close()時引發(fā)該異常。warning類表示程序中的代碼引起的警告。python中的異常使用繼承結(jié)構(gòu)創(chuàng)建,可以在異常處理程序中捕獲基類異常,也可以捕獲各種子類異常,python中使用try.except語句捕獲異常,異常子句定義在try子句后面。1.4 python其他語言的比較 一般的說法的這樣的: shell script 太舊了,無論如何不能用來寫程式。 perl 擅長做服務(wù)器的管理,因?yàn)樗淖执幚砉δ芴貏e強(qiáng)大,同時有全面的編程接口和操作系統(tǒng)相連。自己用沒問題,就是不懂人家在寫什么。

9、 php 擅長于網(wǎng)頁,因?yàn)樗梢郧度朐?html 文件中并支援各類資料庫。但一離開網(wǎng)頁就左支右絀。 python 特別適合一般的需求,因?yàn)樗Z法簡明,容易維護(hù),有很多模組可用,而且容易做出圖形介面。但它并不是 object oriented 并不純,速度也較 perl 慢一些。 tcl/tk 基本變數(shù)形態(tài)只有文字串,每次算術(shù)都是從文字變數(shù)字再變文字,鳴,沒什么好提的了吧。 java 太偉大了,我可不想每次開始寫程式時都幻想要完成一個跨企業(yè)的解決方案,引入幾十個標(biāo)頭檔,寫完了才明白原來我只需它讀一個用戶指定的文件,畫兩條直線就行了。唉,落差太大。 ruby 太新了,要正式應(yīng)用是將來的事。 1.5

10、 簡單程序示例按照慣例,學(xué)習(xí)語言的第一個程序是hello,world。在python 中編寫一個hello,world 程序非常簡單,如下:hello.py#! /usr/bin/env pythonprint hello, world!執(zhí)行python hello.py,即在屏幕打印hello, world!2 mysql2.1 mysql概況mysql是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典mysql ab公司開發(fā),目前屬于oracle公司。mysql是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。mysql的sql語

11、言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。mysql軟件采用了雙授權(quán)政策(本詞條“授權(quán)政策”),它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇mysql作為網(wǎng)站數(shù)據(jù)庫。由于其社區(qū)版的性能卓越,搭配php和apache可組成良好的開發(fā)環(huán)境。 目前mysql 被廣泛地應(yīng)用在internet 上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了mysql 作為網(wǎng)站數(shù)據(jù)庫。2.2 mysql系統(tǒng)特征下面來總結(jié)一下它的特點(diǎn):(1) 使用c 和c+編寫,并使用了多種編譯器進(jìn)

12、行測試,保證源代碼的可移植性。(2) 支持aix、freebsd、hp -ux、linux、mac os、novell netware、openbsd、os/2 wrap、solaris、windows 等多種操作系統(tǒng)。(3) 為多種編程語言提供了api。這些編程語言包括c、c+、eiffel、java、perl、php、python、ruby 和tcl 等。(4) 支持多線程,充分利用cpu 資源。(5) 優(yōu)化的sql 查詢算法,有效地提高查詢速度。(6) 既能夠作為一個單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的gb 2

13、312、big5,日文的shift_jis 等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。(7) 提供tcp/ip、odbc 和jdbc 等多種數(shù)據(jù)庫連接途徑,常見的編碼如中文的gb 2312、big5,日文的shift_jis等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。 (8)提供tcp/ip、odbc和jdbc等多種數(shù)據(jù)庫連接途徑。(9)提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具。(10)支持大型的數(shù)據(jù)庫??梢蕴幚頁碛猩锨f條記錄的大型數(shù)據(jù)庫。 (11)支持多種存儲引擎2.3 基本命令 中的內(nèi)容為可選項(xiàng) -創(chuàng)建數(shù)據(jù)庫 mysql create database 數(shù)據(jù)庫名稱 -創(chuàng)建表 mysql create ta

14、ble 表名 ( 列的名字(id)類型(int(4)primary key(定義主鍵) auto_increment(描述 自增), , ); -查看所有數(shù)據(jù)庫 mysql show databases ; -使用某個數(shù)據(jù)庫 mysql use 數(shù)據(jù)庫名稱; -查看所使用數(shù)據(jù)庫下所有的表 mysql show tables; -顯示表的屬性結(jié)構(gòu) mysql desc 表名; -選擇表中數(shù)據(jù)的顯示 -* 代表選擇所有列 , mysql select * from 表名 where id=?and name=? or name=?; mysql select id,name from 表名orde

15、r by 某一列的名稱 desc(降序,asc為升序) -刪除表中的數(shù)據(jù) mysql delete from table where id=?or name=? (and name=?); -刪除表 mysql drop table; -刪除數(shù)據(jù)庫 mysql drop database;3 mysqldb從上面python 和mysql 的介紹可以看出,通過python 訪問mysql 數(shù)據(jù)庫能充分發(fā)揮python 和mysql 數(shù)據(jù)庫的優(yōu)勢。而要訪問數(shù)據(jù)庫,就必須有相應(yīng)的數(shù)據(jù)接口api,mysqldb就是這樣一個開源的數(shù)據(jù)庫訪問api,并且是線程安全的。mysqldb 庫有幾個重要的對象:

16、(1) connection objects連接對象是connect 函數(shù)返回的,該對象有如下幾個關(guān)鍵方法:1) commit () 提交當(dāng)前事務(wù)2) rollback () 回滾當(dāng)前事務(wù)3) cursor () 獲得一個游標(biāo)對象。事實(shí)上mysql 并不支持游標(biāo),但是可以通過api 來模擬。(2) cursor objects游標(biāo)(cursor) 是處理數(shù)據(jù)的一種方法,為了查看或者處理結(jié)果集中的數(shù)據(jù),游標(biāo)提供了在結(jié)果集中一次以行或者多行前進(jìn)或向后瀏覽數(shù)據(jù)的能力??梢园延螛?biāo)當(dāng)作一個指針,它可以指定結(jié)果中的任何位置,然后允許用戶對指定位置的數(shù)據(jù)進(jìn)行處理。游標(biāo)包含兩個部分:一個是游標(biāo)結(jié)果集、一個是游

17、標(biāo)位置。游標(biāo)結(jié)果集:定義該游標(biāo)得select 語句返回的行的集合。游標(biāo)位置:指向這個結(jié)果集某一行的當(dāng)前指針。mysqldb 中游標(biāo)對象最重要的方法是execute 方法。execute (sql)下面通過實(shí)例來說明mysqldb 訪問mysql,開發(fā)環(huán)境:windowsxp + python2.5 + mysql5.1。3.1 安裝步驟(1) 在 下載python-2.5.4.msi 并安裝。(2) 在 下載mysql-5.0.19-win32.zip 并安裝。(3) 在sourceforge: mysqldb,下載解壓縮后放到%python_home%libsit

18、e-packages 目錄中,python 會自動找到此包。3.2 簡單使用import mysqldb test=mysqldb.connect(db=databasename,host=localhost,user=username,passwd=password) cur = test.cursor() cur.execute(create table users(login varchar(8), uid int) 0l 現(xiàn)在來插入幾行數(shù)據(jù)到數(shù)據(jù)庫, 然后再將它們?nèi)〕鰜? cur.execute(insert into users values(john, 7000) 1l cur.e

19、xecute(insert into users values(jane, 7001) 1l cur.execute(insert into users values(bob, 7200) 1l cur.execute(select * from users where login like j%) 2l for data in cur.fetchall(): . print %st%s % data . john 7000 jane 7001 3.3 示例程序(1) 由于要訪問數(shù)據(jù)庫,首先啟動mysql 數(shù)據(jù)庫,命令:mysqld-nt standalone,然后用下面腳本創(chuàng)建一個數(shù)據(jù)庫re

20、st:grant all privileges on *.* to restlocalhost identified byrest with grant option;grant all privileges on *.* to rest% identified by rest,with grant option;flush privileges;create database rest default character set utf8;use rest;(2) 編寫python 源碼access.py#-*- encoding: utf-8 -*-import os, sys, stri

21、ngimport mysqldb # 導(dǎo)入mysqldb 模塊# 連接數(shù)據(jù)庫try:conn = mysqldb.connect (host= localhost,user=root,passwd=rainman,db=rest)except exception, e:print esys.exit ()# 獲取cursor 對象來進(jìn)行操作cursor = conn.cursor ()# 創(chuàng)建表sql = create table if not exists test1 (name varchar (128)primary key, age int (4)cursor.execute (sql

22、)# 插入數(shù)據(jù)sql = insert into test1 (name, age) values (%s, %d)% ( zhaowei , 23)try:cursor.execute (sql)except exception, e:print esql = insert into test1 (name, age) values (%s, %d)% ( 張三 , 21)try:cursor.execute (sql)except exception, e:print e# 插入多條sql = insert into test1 (name, age) values (%s, %s)val

23、 = ( 李四 , 24) , ( 王五 , 25) , ( 洪六 , 26)try:cursor.executemany (sql, val)except exception, e:print emit () ;# 查詢出數(shù)據(jù)sql = select * from test1cursor.execute (sql)alldata = cursor.fetchall ()# 如果有數(shù)據(jù)返回,就循環(huán)輸出, alldata 是有個二維的# 列表if alldata:for rec in alldata:print rec 0 , rec 1cursor.close ()conn.close ()(3) 執(zhí)行結(jié)果如下:python access.py張三 21王五 25zhaowei 23李四 24洪六 264 結(jié)語通過上文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論