公司的項(xiàng)目中有訪問(wèn)DB2數(shù)據(jù)的需求,我以前也只是聽(tīng)說(shuō)DB2有這么個(gè)咚咚,據(jù)說(shuō)也是個(gè)恐龍級(jí)的數(shù)據(jù)庫(kù)。以前也沒(méi)有用過(guò)DB2 在c語(yǔ)言的接口(訪問(wèn)oracle我一直用oci),網(wǎng)上一兜,才發(fā)現(xiàn)DB2有JDBC的訪問(wèn)接口,c方面的很少。
項(xiàng)目的工期比較緊,同時(shí)我也不想花太多的時(shí)間研究數(shù)據(jù)庫(kù)訪問(wèn)接口,所以在項(xiàng)目中許多模塊都是用python編寫(xiě),開(kāi)發(fā)周期短,調(diào)試,跨平臺(tái)也是很吸引人,所以就用python拉。在python.org一搜索,便找到了pydb2,OK! 馬上下載pydb1.2,一解開(kāi)壓縮包,原來(lái)是原代碼,只能編譯拉。還好有編譯腳本:), 運(yùn)行setup.py install
出現(xiàn)以下異常:
Compiling under Visual Studio .NET v7 recieves the
following error:
_db2_module.c(1855) : error C2036: 'SQLPOINTER' :
unknown size
This can be resolved by casting to (SQLCHAR *) instead
of a (void *):
< SQLPOINTER buf = (SQLPOINTER)((SQLCHAR
*)bs->buf + (bs->bufLen * idx));
發(fā)現(xiàn)原來(lái)SQLCHAR類(lèi)型沒(méi)有找到,沒(méi)問(wèn)題,找到_db2_module.c:1855行修改為:
SQLPOINTER buf = (SQLPOINTER)((void *)bs->buf +
(bs->bufLen * idx));
再次 setup.py install
ok,編譯成功,db2.py的模塊也被拷貝得到 $PYTHONHOME/lib/site_pakages/下去了
然后安裝db2 client runtime
這樣就完成了pydb2的運(yùn)行配置。然后就在odbc中配置一個(gè)dsn
測(cè)試以下代碼:
import DB2
conn = DB2.connect(dsn='sample', uid='db2inst1', pwd='secret')
無(wú)異常表示成功連接上DB2
之后訪問(wèn)數(shù)據(jù)庫(kù)只要遵循python DBI2.0的規(guī)范就可以拉!
生活在python世界是很快樂(lè)的事情!
*注意: python2.4的話(huà)必須用vc7.1編譯pydb2的擴(kuò)展模塊,因?yàn)閜ython2.4(win32)也是用vc7.1編譯的