返回首页

gbase数据、南大通用产品文档:GBase8apython 语言调用GBase 8a ODBC 驱动

更新日期:2024年09月11日

使用python 语言调用GBase
8a
ODBC 时,
需要在下载安装python 和pyodbc
包。以python2.7 为例
1, 从http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz 下
载python2.7 的源码包。
2, 从http://pyodbc.googlecode.com/files/pyodbc-3.0.6.zip 下载
pyodbc-3.0.6 的安装包。
3, 安装python2.7,先解压Python-2.7.3.tgz,然后执行如下命令:

GBase 8a 程序员手册ODBC 篇
南大通用数据技术股份有限公司

- 79 -
./configure --prefix=/opt/python2.7
make
make install
4, 安装pyodbc-3.0.6,先解压pyodbc-3.0.6.zip,然后执行如下命令:

/opt/python2.7/bin/python setup.py build install
这样python2.7 和pyodbc-3.0.6 就安装成功。可以进行python 控制台进
行验证,如下所示:
[root@GBase pyodbc-3.0.6]# /opt/python2.7/bin/python
Python 2.7.3 (default, Jul 16 2012, 18:45:35)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>> import pyodbc
>>>
使用import pyodbc 引用pyodbc 时没有报错,说明python 安装成功。
接下来是创建ODBC 数据源,
创建ODBC 数据源的方法请参考3.2.2。
如果涉
及到中文,那么一定要设置GBase 8a ODBC 驱动的字符集(该字符集需要与集
群安装时默认的字符集保持一致)

此用例中GBase
8a
ODBC 字符集设置为UTF8。

创建ODBC 数据源成功后就可以使用如下python 脚本测试:
#! /opt/python2.7/bin/python
#coding:utf8
import pyodbc

conn_str = 'DSN=gbase;'
conn = pyodbc.connect(conn_str)

GBase 8a 程序员手册ODBC 篇


- 80 -

南大通用数据技术股份有限公司
cursor = conn.cursor()
cursor.execute("drop table if exists t_pyodbc")
cursor.execute("create table t_pyodbc(a varchar(100), b int)")
cursor.execute("insert
into
t_pyodbc(a
,
b)
values(?,
?)",
'pyodbc',
10)
cursor.execute("insert into t_pyodbc(a , b) values(?, ?)", '南大
通用', 11)
cursor.commit()
cursor.execute("select * from t_pyodbc")
row = cursor.fetchall()
for r in row:
print "%s %d" % (r[0].encode('utf8'), r[1])

动态链接库
(DLL)
是可由应用程序共享的资源和函数的集合。
它类似于 runtime 库,
因为它存储许多应用程序需要的函数。然而,它与 runtime 库不同之处在于它链接到调用
的应用程序。
在编译时链接的库是静态链接库。诸如 libc 和 libcmt 之类的库(与 Microsoft™
Visual C++ Version 2.x 一起使用)是静态链接库。 无论何时将这些 Microsoft Visual C++
(版本 2.x)
之一链接到应用程序,
链接器将代码从适当的静态链接库复制到应用程序的可
执行文件中(.exe)。相比之下,当自动链接时,不会将代码复制到应用程序的可执行文件
中。相反,您的函数在运行时链接。
静态链接库在不需要多任务的环境中是有效的。但是,当多个应用程序调用相同的功
能时,它们变得无效。例如:如果在 Windows™ 环境中同时运行的两个应用程序调用相
同的静态链接函数,则该函数的两个副本位于内存中。这种情况是低效率的。
但是如果一个函数是动态链接的,则 Windows 系统首先检查内容,看看函数的副本
是否已经存在。如果存在副本,则 Windows 系统使用此副本而不是另一个创建另一个副
本。
如果内存中该函数还尚未存在,
则 Windows 系统将该函数从 DLL 中链接或复制到内
存中。
GBase 8s ESQL/C 库函数和其它内部函数包含在 ESQL 客户端接口 DLL 中。
要在您
的 GBase 8s ESQL/C 函数中使用这些函数,必须执行以下操作:
访问 ESQL 客户端接口 DLL 的导入库
定位 ESQL 客户端接口 DLL
访问导入库
使用 DLL 的导入库以使您的 GBase 8s ESQL/C 应用程序访问 ESQL 客户端接口
DLL 。
链接器使用导入库定位 DLL 中包含的函数。它包含使应用程序中使用的函数名称与
包含该函数的库模块协调的引用。
当将静态库链接到应用程序时,链接器将程序代码以静态链接库复制到可执行文件。
但是,如果将导入库链接到应用程序,链接器在链接可执行文件时不会复制程序代码。链
接器存储在 DLL 中定位函数所需的信息。运行应用程序是,此位置信息充当 DLL 的动
态链接。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 73 -
ESQL 客户端接口库提供 GBase 8s ESQL/C 函数调用的位置信息。当您使用它编译
并链接您的 GBase 8s ESQL/C 程序时,esql 命令处理器将自动链接 DLL 的导入和
Windows™ 库。
定位 DLL
在程序开发期间,GBase 8s ESQL/C 软件(如 esql 命令处理器)必须能访问对象库
并导入库。但是,在运行应用程序时 DLL 必须是可访问的。也就是说,Windows™ 必须
能够在您的硬盘上找到它们。
按照以下顺序搜寻 DLL 的目录:
加载应用程序的目录
Windows 环境系统目录 SYSTEM
当前目录(可执行文件所在的位置或图标的程序项目属性值指定的工作目录)
PATH 环境变量列出的目录
有关特定 Windows 操作系统的最新信息,请参阅 http://www.microsoft.com 上的
动态链接库搜寻顺序文档。
构建应用程序 DLL
可以告诉 GBase 8s ESQL/C 处理器使用 -target(或 -wd)命令行选项将 GBase 8s
ESQL/C 程序构建为 DLL(.dll 文件)ile)。这种 GBase 8s ESQL/C 程序被称为应用程序
DLL。
要将 GBase 8s ESQL/C 程序构建为 DLL,
请遵循通用 DLL 的直到。
有关更多信息,
请参阅您的系统文档。使用 -target:dll(或 -wd)编译 GBase 8s ESQL/C 源文件以创建应
用程序 DLL。
有关如何构建应用程序 DLL 的信息,
请参阅 %GBASEDBTDIR%\demo\wdemo 目录
中的 WDEMO 演示程序。示例应用程序 DLL 的 GBase 8s ESQL/C 源文件称为 wdll.ec。
要编译此 DLL,使用下面的 esql 命令:
esql -subsystem:windows -target:dll wdll.ec
WDEMO 可执行文件的源代码在 wdemo.exe 文件中。

操作步骤
步骤1:确认当前的distribution id,在当前示例中新的Distribution ID 为3,旧的
Distribution ID 为1:

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
235
$ gcadmin showdistribution vc vc1
Distribution ID: 3 | State: new | Total segment num: 3
Primary Segment Node IP
Segment ID
Duplicate Segment node IP
=========================================================================
|