返回首页

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()

如果用户有低于 Repeatable Read 的隔离级别,
则一旦从游标访存下一行,
数据库服务器就
释放放置在行上的更新锁。
当您设置任何下列隔离级别时,
使用此特性,
您可使用 RETAIN
UPDATE LOCKS 子句来保留更新锁,直到事务的结束为止:

Dirty Read

Committed Read

Cursor Stability
此特性允许您避免 Repeatable Read 隔离级别的开销或暂时避开诸如行上的假更新。当打
开 RETAIN UPDATE LOCKS 特性,
且在 SELECT...FOR UPDATE 语句的访存期间在行上
隐式地放置更新锁时,
直到事务的结束,
才释放更新锁。
使用 RETAIN UPDATE LOCKS 特
性,
仅保持更新锁,
直到事务的结束为止,而 Repeatable Read 隔离级别同时保持更新锁和
共享锁,直到会话的结束为止。
下列示例展示当您将隔离级别设置为 Committed Read 时,如何使用 RETAIN UPDATE
LOCKS 子句。
SET ISOLATION TO COMMITTED READ RETAIN UPDATE LOCKS
要关闭 RETAIN UPDATE LOCKS 特性,
请不要使用 RETAIN UPDATE LOCKS 子句来设置
隔离级别。当您关闭该特性时,未直接地释放更新锁。然而,从此时起,后续的访存释放
紧前的访存的更新锁,而不是更早的访存操作的更新锁。关闭的游标释放当前行上的更新
锁。
要获取关于当您指定隔离级别时,如何使用 RETAIN UPDATE LOCKS 特性的更多信息,
请参阅《GBase 8s SQL 指南:语法》。

可以使用 onstat -s 命令显示一般锁存器信息,包含锁存器控制的资源。
语法:

示例输出
图: onstat -s 命令输出

输出描述
name
使用以下缩写标识锁存器所控制的资源:
archive
存储空间备份
bf
缓冲区
bh
哈希缓冲区
chunks
Chunk 表
ckpt
检查点
dbspace
Dbspace 表
flushctl
页清除程序控制
flushr
页清除程序
locks
Lock 表
loglog
逻辑日志
LRU
LRU 队列
physb1
第一个物理日志缓冲区

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 655 -

physb2
第二个物理日志缓冲区
physlog
物理日志
pt
Tblspace tblspace
tblsps
Tblspace 表
users
用户表
address
是锁存器的地址
如果线程正在等待锁存器,那么该地址显示在 onstat -u (用户)命令输出的 wait 字段
lock
标示锁存器是否已锁定并设置
标示锁状态的代码(1 或 0)与计算机有关
wait
标示是否有任何用户线程正在等待锁存器
userthread
是正在等待锁存器的任何用户线程的共享内存地址
此线程包含线程控制块地址,所有线程都有这些地址。您可以比较该地址与 onstat -u 输出
中的用户地址以获得用户进程标识号
要从 tcb 地址中获得 rstcb 地址,请检查 onstat -g ath 命令的输出,它列出了每个用户线
程的这两个地址。