公司的項(xiàng)目中有訪問DB2數(shù)據(jù)的需求,我以前也只是聽說DB2有這么個咚咚,據(jù)說也是個恐龍級的數(shù)據(jù)庫。以前也沒有用過DB2 在c語言的接口(訪問oracle我一直用oci),網(wǎng)上一兜,才發(fā)現(xiàn)DB2有JDBC的訪問接口,c方面的很少。
項(xiàng)目的工期比較緊,同時我也不想花太多的時間研究數(shù)據(jù)庫訪問接口,所以在項(xiàng)目中許多模塊都是用python編寫,開發(fā)周期短,調(diào)試,跨平臺也是很吸引人,所以就用python拉。在python.org一搜索,便找到了pydb2,OK! 馬上下載pydb1.2,一解開壓縮包,原來是原代碼,只能編譯拉。還好有編譯腳本:), 運(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)原來SQLCHAR類型沒有找到,沒問題,找到_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中配置一個dsn
測試以下代碼:
import DB2
conn = DB2.connect(dsn='sample', uid='db2inst1', pwd='secret')
無異常表示成功連接上DB2
之后訪問數(shù)據(jù)庫只要遵循python DBI2.0的規(guī)范就可以拉!
生活在python世界是很快樂的事情!
*注意: python2.4的話必須用vc7.1編譯pydb2的擴(kuò)展模塊,因?yàn)閜ython2.4(win32)也是用vc7.1編譯的