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