緣由
近期在折騰一個小東西須要抓取網上的頁面。然後進行解析。將結果放到資料庫中。
了解到Python在這方面有優勢,便選用之。
由於我有台server上面安裝有mysql,自然使用之。在進行資料庫的這個作業過程中遇到了不少問題,這裡記錄一下,大家共勉。
python中mysql的呼叫
百度之後能夠透過MySQLdb進行資料庫操作。查看文件,了解到python中提供了一個mysql時直接實作了mysql的c語言API。 MySQLdb是對其在更高一層的封裝,因此,使用起來更加方便。我們能夠使用mysql,但更好的方法是使用MySQLdb
安裝中遇到的問題
在這個頁面http://sourceforge.net/projects/mysql-python/mysql-python/能夠下載到最新版本號的MySQLdb,解壓縮後運行安裝時,可能會有一些問題。
透過python setup.py build 運行安裝會提示No module named setuptools
解決方法,安裝之
〜sudo 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,'ftrict -final' ) -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
〜〜〜〜〜〜〜㟎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
實際使用
conn= MySQLdb.connect(host=“localhost”,user=“root”,passwd=“sa”,db=“mytable”,charset=“utf8”) 提供的connect方法用來和資料庫建立連線,接收數個參數,傳回連接物件. 運行語句和取結果 cursor=conn.cursor() n=cursor.execute(sql,param) ,先我們用使用物件我們會使用cursor提供的方法來進行工作.這些方法包含兩大類:1.運行命令,2.接收回傳值 後面再具體說。這裡不詳說 結束。關閉資料庫連線 須要分別的關閉指針對象和連接物件.他們有名字同樣的方法 cursor.close() conn.close()『〜『的方法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上面拉回來。中間出了點差錯。我刪除文件,這篇文章差點沒了。只是還好如今能看到這篇文章。