返回首页

gbase数据、南大通用产品文档:GBase8a执行多条语句

更新日期:2024年09月11日

使用游标执行多条SQL语句。
from GBaseConnector import connect, GBaseError
if __name__ == '__main__':
config = {'host':'172.16.0.131',
'user':'root',
'passwd':'111111',
'port':5258,



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

- 7 -
'db':'test'}
try:
conn = connect()
conn.connect(**config)
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS test(id INT, name VARCHAR(20))")
cur.execute("INSERT INTO test VALUES(%s,%s)", (1,'hello'))

iters = cur.execute("UPDATE test SET id=%s,name=%s;DELETE FROM test;SELECT
'result';",
params=(2,'world'), multi_stmt=True)
for i in iters:
try:
print i.fetchall()
except GBaseError.InterfaceError:
pass
cur.execute("DROP TABLE IF EXISTS test")
except GBaseError.DatabaseError, err:
print err
finally:
conn.close()

sqlexit() 函数终止所有数据库服务器连接,并释放资源。您可使用 sqlexit() 来减少程
序中数据库开销,其仅短暂地引用数据库且在很长间隔之后,或仅在初始化期间访问数据
库。

语法
mint sqlexit();

用法

当无数据库打开时,
仅调用 sqlexit() 函数。
如果打开的数据库使用事务,
则在 sqlexit()
关闭数据库之前,
它回滚任何打开的事务。
此函数的行为类似于 DISCONNECT ALL 语句。
然而,
如果任何当前的事务退出,
则 DISCONNECT ALL 语句失败。
在您调用 sqlexit() 之
前,请使用 CLOSE DATABASE 语句来关闭打开的数据库。

在应用程序调用 sqlexit() 之前,如果它仅有一个隐式的连接,则下一 SQL 语句的执
行,或 sqlstart() 库函数的执行会重新建立至缺省的数据库服务器的隐式的连接。如果应用
程序创建了一个或多个显式的连接,则在您执行任何其他 SQL 语句之前,您必须发出
CONNECT 语句。

返回代码
0
sqlexit() 调用成功。
<0
sqlexit() 调用不成功。

单query 索引推荐
单query 索引推荐功能支持用户在数据库中直接进行操作,
本功能基于查询语句的语义
信息和数据库的统计信息,
对用户输入的单条查询语句生成推荐的索引。
本功能涉及的函数
接口如下。
表11- 9 单query 索引推荐功能的接口
函数名
参数
功能
gs_index_advise
SQL 语句字符串
针对单条查询语句生成推荐索引

本功能仅支持单条SELECT 类型的语句,不支持其他类型的SQL 语句。

本功能暂不支持列存表、段页式表、普通视图、物化视图、全局临时表以及密态数
据库。
使用方法
使用上述函数,
获取针对该query 生成的推荐索引,
推荐结果由索引的表名和列名组成。
例如:
gsql=> select "table", "column" from gs_index_advise('SELECT c_discount from
bmsql_customer where c_w_id = 10');
table
|
column
----------------+----------
bmsql_customer | c_w_id
(1 row)
上述结果表明:应当在bmsql_customer 的c_w_id 列上创建索引,例如可以通过下述
SQL 语句创建索引:
CREATE INDEX idx on bmsql_customer(c_w_id);
某些SQL 语句,也可能被推荐创建联合索引,例如:
gsql=# select "table", "column" from gs_index_advise('select name, age, sex from t1 where
age >= 18 and age < 35 and sex = ''f'';');

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
385
table | column
-------+------------
t1
| age, sex
(1 row)
则上述语句表明应该在表t1 上创建一个联合索引(age, sex),则可以通过下述命令创
建:
CREATE INDEX idx1 on t1(age, sex);
针对分区表可推荐具体索引类型,例如:
gsql=# select "table", "column", "indextype" from gs_index_advise('select name, age, sex from
range_table where age = 20;');
table | column | indextype
-------+--------+-----------
t1
| age
| global
(1 row)
系统函数gs_index_advise()的参数是文本型,
如果参数中存在如单引号
(')
等特殊字符,
可以使用单引号(')进行转义,可参考上述示例。