Python 操作金仓数据库7 失败历程

概述

        项目中使用DJango写网站,数据库用的金仓数据库7(KingBaseV7)。出现了使用DJango ORM框架的Model无法读取double类型数据的问题,暂未找到解决方法(金仓数据库8是没有问题的)。故改为手动编写SQL语句操作数据库表,但均未成功。
使用psycopg2:读取double类型数据出错;
使用psyodbc:读取decimal类型数据出错。

一、使用psycopg2

   金仓数据库提供的Python驱动包名为:psycopg2(该Python包使用的应该是jdbc方式调用的库接口)。
下载地址为:https://pypi.python.org/pypi/psycopg2/
使用这种方式后,发现上述问题出现的原因就是 psycopg2库导致的,欲哭无泪,原来DJango自己也是用的psycopg2包。

psycopg2代码示例

金仓数据库的python驱动包使用方法和达梦数据库及Oracle等基本一样,除了库名称不同。使用示例如下:

import psycopg2
 conn = psycopg2.connect( database="TESTDB", user="TEST", password="1234567890", host="127.0.0.1",  port="54321" )
 cursor = conn.cursor()
 cursor.execute( "select * from ertu" )
 ertu = cursor.fetchone()  #cursor.fetchall()
 print( ertu )

二、使用pyodbc

上述方法失败后,参考金仓数据库Help文件夹下的【开发手册.pdf】,改为使用ODBC方式调用数据库。
备注:使用pyodbc操作数据库,解决了无法读取金仓7的double类型数据问题,但出现了新的问题(Decimal类型数据无法解析~..~)。

1、首先配置ODBC数据源

1.1. ODBC版本查看:odbc_config --version
1.2. 配置文件路径:/etc/odbcinst.ini (odbc_config --odbcini 命令查看)(若没有该文件,手动创建一个)
1.3. 在配置文件/etc/odbcinst.ini中写入:

[KingbaseES 7 ODBC Driver]
Description=KingbaseES 7 ODBC Driver for Linux
Driver64=/home/d5000/odbc/kdbodbc7.so
Setup64=/home/d5000/odbc/kdbodbc7S.so
UsageCount=1

1.4. 内容生效确认:先import pyodbc,然后用pyodbc.drivers()函数查看,输出:['KingbaseES 7 ODBC Driver'] 即为配置成功(之前使用该函数,输出空列表)

2、代码示例

import pyodbc
conn = pyodbc.connect('DRIVER={KingbaseES 7 ODBC Driver};SERVER=127.0.0.1;port=54321;DATABASE=PSM2000;UID=PSM;PWD=METERAGE')
cursor = conn.cursor()
cursor.execute( "select * from ertu" )
ertu = cursor.fetchone()
print( ertu )

附图:
Python 操作金仓数据库7 失败历程

三、考虑使用Java封装一个第三方库

有同事使用Java访问金仓7数据库是成功的,故现考虑封装一个Java包,供Python使用,或抛弃Python-Django,直接使用Java-Web进行开发。。。

猜你喜欢

转载自blog.51cto.com/weiyuqingcheng/2585144
今日推荐