返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

执行事务
通过设置连接参数中的autocommit=False 参数,即可控制事务,可通过连
接的commit 方法提交事务、rollback 方法回滚事务。
from GBaseConnector import connect, GBaseError
if __name__ == '__main__':
config = {'host':'172.16.0.131',
'user':'root',
'passwd':'111111',
'port':5258,
'db':'test',
'autocommit':False,}
try:
conn = connect()
conn.connect(**config)
cur = conn.cursor()
cur.execute("DROP PROCEDURE IF EXISTS test")
cur.execute("CREATE TABLE IF NOT EXISTS test(id INT, val VARCHAR(20))")
cur.execute("INSERT INTO test VALUES(1,'hello')")
conn.rollback()
cur.execute("INSERT INTO test VALUES(2,'world')")
conn.commit()
cur.execute("SELECT * FROM test")
print cur.fetchall()



GBase Python 接口开发手册
南大通用数据技术股份有限公司

- 15 -
cur.execute("DROP TABLE IF EXISTS test")
except GBaseError.DatabaseError, err:
print err
finally:
conn.close()
或者使用cur.execute("set autocommit=false")来开启一个事物。
from GBaseConnector import connect, GBaseError
if __name__ == '__main__':
config = {'host':'172.16.0.131',
'user':'root',
'passwd':'111111',
'port':5258,
'db':'test'}
try:
conn = connect()
conn.connect(**config)
cur = conn.cursor()
cur.execute("DROP PROCEDURE IF EXISTS test")
cur.execute("CREATE TABLE IF NOT EXISTS test(id INT, val VARCHAR(20))")
cur.execute("set autocommit=false")
cur.execute("INSERT INTO test VALUES(1,'hello')")
conn.rollback()
cur.execute("INSERT INTO test VALUES(2,'world')")
conn.commit()
cur.execute("SELECT * FROM test")
print cur.fetchall()
cur.execute("DROP TABLE IF EXISTS test")
except GBaseError.DatabaseError, err:
print err
finally:
conn.close()


GBase 8c 工具参考手册
南大通用数据技术股份有限公司
III


GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 81 -
当调用 SQLExecute 或 SQLExecDirect 时,
GBase 8s ODBC Driver 从应用程序中的存储位
置检索使用 SQLBindParameter 绑定的参数的数据。
对于处于执行的数据参数,请调用 SQLPutData 来发送参数数据。如有必要,GBase 8s
ODBC Driver 将数据由 SQLBindParameter 中 ValueType 参数指定的数据类型转换为
SQLBindParameter 中 fSqlType 参数指定的数据类型。最终,GBase 8s ODBC Driver 将数
据发送至数据源。
如果在 SQLBindParameter 中指定的 rgbValue 和 pcbValue 参数都是空指针,则该函数返
回 SQLSTATE S1009(无效的参数值)。要指定空 SQL 数据值,请将 SQLBindParameter
的 pcbValue参数指向的值,或将 cbValue 参数的值设置为 SQL_NULL_DATA。要指定
rgbValue 中的值为空终止字符串,请将这些值设置为 SQL_NTS。
在表中使用下列术语:
数据的长度
无论数据在发送到应用程序之前是否被截断,可用于发送至数据源的 SQL 数据的
字节数。对于字符串数据,这不包括空终止字节。
列长度和显示大小
定义了精度、小数位数、长度和显示大小 中的每个 SQL 数据。
位数
表示数值的字符数,包括负号、小数点和指数(如果需要的话)。
斜体词语
表示 GBase 8s ODBC Driver SQL 语法的元素。
C 至 SQL:二进制
二进制 GBase 8s ODBC Driver C 数据类型为 SQL_C_BINARY。
下表展示可将二进制 C 数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。

“测试”
列中,SQL 数据长度是在数据源上存储该数据需要的字节数。此长度可能不同于列长度,
如同 精度、小数位数、长度和显示大小 中定义的那样。
可将 C 数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。
fSqlType
测试
SQLSTATE
SQL_BIGINT
数据的长度 = SQL 数据长度。
不适用
数据的长度 ≠ SQL 数据长度。
22003
SQL_BIT
数据的长度 = SQL 数据长度。
不适用
数据的长度 ≠ SQL 数据长度。
22003
SQL_CHAR
SQL_LONGVARCHAR
SQL_VARCHAR
数据的长度 ≠ 列长度。
不适用
数据的长度 > 列长度。
01004
SQL_DATE
SQL_TIMESTAMP
数据的长度 = SQL 数据长度。
不适用
数据的长度 ≠ SQL 数据长度。
22003
SQL_DECIMAL
数据的长度 = SQL 数据长度。
不适用

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 82 -
fSqlType
测试
SQLSTATE
SQL_DOUBLE
SQL_INTEGER
SQL_REAL
SQL_SMALLINT
数据的长度 ≠ SQL 数据长度。
22003
SQL_LONGVARBINARY
数据的长度 ≠ 列长度。
不适用
数据的长度 > 列长度。
01004

C 至 SQL:位
位 GBase 8s ODBC Driver C 数据类型为 SQL_C_BIT。
下表展示可将位 C 数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。
fSqlType
测试
SQLSTATE
SQL_BIGINT
SQL_DECIMAL
SQL_DOUBLE
SQL_INTEGER
SQL_REAL
SQL_SMALLINT

不适用
SQL_BIT

不适用
SQL_CHAR
SQL_LONGVARCHAR
SQL_VARCHAR

不适用
GBase 8s ODBC Driver 会忽略 SQLBindParameter 的 pcbValue 参数指向的值,以及从布
尔 C 数据类型转换数据时 SQLPutData 的 cbValue 参数的值。GBase 8s ODBC Driver 使
用 rgbValue 的大小来表示布尔 C 数据类型的大小。

C 至 SQL:字符
字符 GBase 8s ODBC Driver C 数据类型为 SQL_C_CHAR。
下表展示可将 C 字符数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。
可将 C 字符数据转换成的 GBase 8s ODBC Driver SQL 数据类型。
fSqlType
测试
SQLSTATE
SQL_BIGINT
无截断转换的数据。
不适用
截断小数为的转换的数据。
01004
数据转换会导致所有位的丢失(与小数位
相反)。
22003
数据值不是数值-文字。
22005

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 83 -
fSqlType
测试
SQLSTATE
SQL_BIT
数据为 0 或 1。
不适用
数据大于 0,小于 2,且不等于 1。
01004
数据小于 0,或大于或等于 2。
22003
数据不是数值-文字。
22005
SQL_CHAR
SQL_LONGVARCHAR
SQL_VARCHAR
数据的长度 ≤ 列长度。
不适用
数据的长度 > 列长度。
01004
SQL_DATE
数据值是有效的 GBase 8s ODBC 驱动程
序日期-文字。
不适用
数据值是有效的 GBase 8s ODBC 驱动程
序时间戳-文字;时间部分为零。
不适用
数据值是有效的 GBase 8s ODBC 驱动程
序时间戳-文字;时间部分非零。GBase 8s
ODBC 驱动程序截断时间戳的时间部分。

01004
数据值不是有效的 GBase 8s ODBC 驱动
程序日期-文字 或 GBase 8s ODBC 驱动
程序时间戳-文字。
22008
SQL_DECIMAL
SQL_INTEGER
SQL_SMALLINT
未经截断转换的数据。
不适用
截断小数位转换的数据。
01004
数据的转换会导致所有位的丢失(与小数
为相反)。
22003
数据值不是数值-文字。
22005
SQL_DOUBLE
SQL_REAL
数据在正在将数值转换为其的数据类型的
范围之内。
不适用
数据在正在将数值转换为其的数据类型的
范围之外。
22003
数据值不是数值-文字。
22005
SQL_LONGVARBINARY
(数据的长度) / 2 ≤ 列长度。
不适用
(数据的长度) / 2 > 列长度。
01004
数据值不是十六进制值。
22005
SQL_TIMESTAMP
数据值是有效的 GBase 8s ODBC 驱动程
序时间戳-文字;不截断小数秒部分。
不适用
数据值是有效的 GBase 8s ODBC 驱动程
序时间戳-文字;截断小数秒部分。
01004

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 84 -
fSqlType
测试
SQLSTATE
数据值是有效的 GBase 8s ODBC 驱动程
序日期-文字。GBase 8s ODBC 驱动程序
将时间戳的时间部分设置为零。
不适用
数据值是有效的 GBase 8s ODBC 驱动程
序时间-文字。GBase 8s ODBC 驱动程序
将时间戳的日期部分设置为当前日期。
不适用
数据值不是有效的 GBase 8s ODBC 驱动
程序日期-文字、GBase 8s ODBC 驱动程
序时间-文字 或 GBase 8s ODBC 驱动程
序时间戳-文字。
22008
当 GBase 8s ODBC Driver 将字符 C 时间转换为数值、日期或时间戳 SQL 数据时,它忽
略开头和结尾的空格。当 GBase 8s ODBC Driver 将字符 C 数据转换为二进制 SQL 数据
时,它将每一两字节字符数据转换为一字节二进制数据。每一两字节字符数据表示一个十
六进制形式的数值。例如,GBase 8s ODBC Driver 将 "01" 转换为二进制 00000001,将
"FF" 转换为二进制 11111111。
GBase 8s ODBC Driver 始终将十六进制数字对转换为单独的字节,并忽略空终止字节。由
于此转换,如果字符串的长度是奇数,则不转换该字符串的最后一个字节(不包括空终止
字节,如果有的话)。

C 至 SQL:日期
日期 GBase 8s ODBC Driver C 数据类型为 SQL_C_DATE。
下表展示可将日期 C 数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。
可将日期 C 数据转换成的 GBase 8s ODBC Driver SQL 数据类型。
fSqlType
测试
SQLSTATE
SQL_CHAR
SQL_LONGVARCHAR
SQL_VARCHAR
列长度 ≥ 10。
不适用
列长度 < 10。
22003
数据值不是有效的日期。
22008
SQL_DATE
数据值是有效的日期。
不适用
数据值不是有效的日期。
22008
SQL_TIMESTAMP
数据值是有效的日期。
GBase 8s ODBC 驱
动程序将时间戳的时间部分设置为零。
不适用
数据值不是有效的日期。
22008
当 GBase 8s ODBC Driver 将日期 C 数据转换为字符 SQL 数据时,生成的字符串采用
yyyy-mm-dd 的格式。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 85 -
当它将数据由日期 C 数据类型转换时,
GBase 8s ODBC Driver 忽略 SQLBindParameter 的
pcbValue 参数指向的值,以及 SQLPutData 的 cbValue 参数的值。对于该日期 C 数据类
型的大小,GBase 8s ODBC Driver 使用 rgbValue 的大小。

C 至 SQL:数值
总共有十种 GBase 8s ODBC Driver C 数据类型。
数值 GBase 8s ODBC Driver C 数据类型是:

SQL_C_DOUBLE

SQL_C_FLOAT

SQL_C_LONG

SQL_C_SHORT

SQL_C_SLONG

SQL_C_STINYINT

SQL_C_TINYINT

SQL_C_ULONG

SQL_C_USHORT

SQL_C_UTINYINT
下表展示可将数值 C 数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。
可将数值 C 数据转换成的 GBase 8s ODBC Driver SQL 数据类型。
fSqlType
测试
SQLSTATE
SQL_BIGINT
未截断的转换的数据。
不适用
截断小数位的转换的数据。
01004
数据的转换会导致所有位的丢失(与小数
位相反)。
22003
SQL_BIT
数据为 0 或 1。
不适用
数据大于 0,小于 2,且不等于 1。
01004
数据小于 0 或大于或等于 2。
22003
SQL_CHAR
SQL_LONGVARCHAR
SQL_VARCHAR
位数 ≤ 列长度。
不适用
所有位数(与小数位相反)≤ 列长度。
01004
所有位数(与小数位相反)> 列长度。
22003
SQL_DECIMAL
SQL_INTEGER
SQL_SMALLINT
未截断的转换的数据
不适用
截断小数位的转换的数据。
01004
数据的转换会导致所有位的丢失(与小数
位相反)。
22003

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 86 -
fSqlType
测试
SQLSTATE
SQL_DOUBLE
SQL_REAL
数据在正在将数值转换为其的数据类型的
范围之内。
不适用
数据在正在将数值转换为其的数据类型的
范围之外。
22003
当它从数值 C 数据类型转换数据时,GBase 8s ODBC Driver 忽略 SQLBindParameter 的
pcbValue 参数指向的值,以及 SQLPutData 的 cbValue 参数的值。对于数值 C 数据类型
的大小,GBase 8s ODBC Driver 使用 rgbValue 的大小。

C 至 SQL:时间戳
时间戳 GBase 8s ODBC Driver C 数据类型为 SQL_C_TIMESTAMP。
下表展示可将时间戳 C 数据转换为哪些 GBase 8s ODBC Driver SQL 数据类型。
可将时间戳 C 数据转换成的 GBase 8s ODBC Driver SQL 数据类型。
fSqlType
测试
SQLSTATE
SQL_CHAR
SQL_LONGVARCHAR
SQL_VARCHAR
列长度 ≥ 显示大小。
不适用
19 ≤ 列长度 < 显示大小。
GBase 8s ODBC Driver 截断时间戳的小数
秒。
01004
列长度 < 19。
22003
数据值不是有效的日期。
22008
SQL_DATE
时刻域为零。
不适用
时刻域非零。
GBase 8s ODBC Driver 截断时间戳结构的
时刻域。
01004
数据值不包含有效的日期。
22008
SQL_TIMESTAMP
不截断小数秒域。
不适用
截断小数秒域。
GBase 8s ODBC Driver 截断时间戳结构的
小数秒域。
01004
数据值不是有效的时间戳。
22008
当 GBase 8s ODBC Driver 将时间戳 C 数据转换为字符 SQL 数据时,生成的字符串采用
yyyy-mm-dd hh:mm:ss[.f...] 的格式。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 87 -
当它由时间戳 C 数据类型转换数据时,
GBase 8s ODBC Driver 忽略 SQLBindParameter 的
pcbValue 参数指向的值,以及 SQLPutData 的 cbValue 参数的值。对于该时间戳 C 数据
类型的大小,GBase 8s ODBC Driver 使用 rgbValue 的大小。

C 至 SQL 数据转换示例
这些示例展示 GBase 8s ODBC Driver 如何将 C 数据转换为 SQL 数据。
下表说明 GBase 8s ODBC Driver 如何将 C 数据转换为 SQL 数据。"\0" 表示一个空终止
字节。仅当该数据的长度为 SQL_NTS 时,才需要空终止字节。对于 SQL_C_DATE,在
“C 数据值”列中的数值是存储在 DATE_STRUCT 结构的字段中的数值。对于
SQL_C_TIMESTAMP,在“C 数据值”列中的数值是存储在 TIMESTAMP_STRUCT 结
构的字段中的数值。
C 数据类型
C 数据值
SQL 数据类型
列长度
SQL 数据

SQLSTATE
SQL_C_CHAR
tigers\0
SQL_CHAR
6
tigers
不适用
SQL_C_CHAR
tigers\0
SQL_CHAR
5
tiger
01004
SQL_C_CHAR