緣由
近期在折騰一個小東西須要抓取網上的頁面。然後進行解析。將結果放到資料庫中。
瞭解到Python在這方面有優勢,便選用之。
由於我有台server上面安裝有mysql,自然使用之。在進行資料庫的這個操作過程中遇到了不少問題,這裡記錄一下,大家共勉。
python中mysql的調用
百度之後能夠通過MySQLdb進行資料庫操作。查看文檔,瞭解到python中提供了一個mysql時直接實現了mysql的c語言API。MySQLdb是對其在更高一層的封裝,因此,使用起來更加方便。我們能夠使用mysql,但更好的方法是使用MySQLdb
安裝中遇到的問題
在這個頁面http://sourceforge.net/projects/mysql-python/能夠下載到最新版本號碼的MySQLdb,解壓後運行安裝時,可能會有一些問題。
通過python setup.py build 運行安裝會提示No module named setuptools
解決方案,安裝之
sudo apt-get install python-setuptools
再次運行,可能還是會出錯 mysql_config not found
此時我們須要安裝mysqld-dev
sudo apt-get install libmysqld-dev
可能再次運行還會出現錯誤。類似這樣 `
building ‘mysql’ extension gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,3,’final’,0) -Dversion=1.2.3 -I/usr/include/mysql -I/usr/include/python2.7 -c mysql.c -o build/temp.linux-i686-2.7/mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX In file included from mysql.c:29:0: pymemcompat.h:10:20: fatal error: Python.h: No such file or directory
解決方式
sudo apt-get install python-dev
這步驟是安裝python的一些開發用的標頭檔。
基本上前面三種之後,不會再出現其它問題了。
可是假設mysql是自己安裝的。而且lib檔案沒有放到/usr/local/lib以下則還會報錯。
解決的方法將檔案軟串連到這個檔案夾下,或者改動系統的/etc/ld.so.cnf檔案,把我們lib所在的檔案夾放進去。兩種方法都能夠。然後在ldconfig,讓其生效就可以。
比方我們用第一種方法 ln -s /usr/local/mysql/lib/mysql/libmysqlclient* /usr/lib
實際使用
引入MySQLdb庫
import MySQLdb
串連資料庫
conn=MySQLdb.connect(host=“localhost”,user=“root”,passwd=“sa”,db=“mytable”,charset=“utf8”)
提供的connect方法用來和資料庫建立串連,接收數個參數,返回連線物件.
運行語句和取結果
cursor=conn.cursor() n=cursor.execute(sql,param)
首先,我們用使用連線物件獲得一個cursor對象,接下來,我們會使用cursor提供的方法來進行工作.這些方法包含兩大類:1.運行命令,2.接收傳回值
後面再具體說。這裡不詳說
結束。關閉資料庫連接
須要分別的關閉指標對象和連線物件.他們有名字同樣的方法
cursor.close()
conn.close()
經常使用操作API
對事務操作的支援,標準的方法 commit() 提交
rollback() 復原
cursor用來運行命令的方法:
callproc(self, procname, args):用來運行預存程序,接收的參數為預存程序名和參數列表,傳回值為受影響的行數
execute(self, query, args):運行單條sql語句,接收的參數為sql語句本身和使用的參數列表,傳回值為受影響的行數
executemany(self, query, args):運行單挑sql語句,可是反覆運行參數列表裡的參數,傳回值為受影響的行數 nextset(self):移動到下一個結果集
cursor用來接收傳回值的方法:
fetchall(self):接收所有的返回結果行.
fetchmany(self, size=None):接收size條返回結果行.假設size的值大於返回的結果行的數量,則會返回cursor.arraysize條資料.
fetchone(self):返回一條結果行.
scroll(self, value, mode=‘relative’):移動指標到某一行.假設mode=‘relative’,則表示從當前所在行移動value條,假設 mode=‘absolute’,則表示從結果集的第一行移動value條.
最後插一句
電腦升級到ubuntu14.04又一次裝的,之前的部落格倉庫沒了,又一次從github上面拉回來。中間出了點差錯。我刪除檔案,這篇文章差點沒有了。只是還好如今能看到這篇文章。