psycopg2.connect() 功能描述 此方法创建新的数据库会话并返回新的connection对象。 原型 import os conn=psycopg2.connect(dbname="test",user=os.getenv('user'),password=os.getenv('password')
connection.cursor() 功能描述 此方法用于返回新的cursor对象。 原型 cursor(name=None, cursor_factory=None, scrollable=None, withhold=False) 参数 表1 connection.cursor参数
connection.commit() 功能描述 此方法将当前挂起的事务提交到数据库。 默认情况下,Psycopg在执行第一个命令之前打开一个事务,如果不调用commit(),任何数据操作的效果都将丢失。 原型 connection.commit() 参数 无 返回值 无 示例 请参见示例:常用操作。
connection.close() 功能描述 此方法关闭数据库连接。 此方法关闭数据库连接,并不自动调用commit()。如果只是关闭数据库连接而不调用commit()方法,那么所有更改将会丢失。 原型 connection.close() 参数 无。 返回值 无。 示例 请参见示例:常用操作。
ip1, ip2, ip3 port = port1, port2的匹配情况为ip1:port1, ip2:port2, ip3:port1。 当num(ip) < num(port)时,则多余的port被舍弃,即使用不到。例如host = ip1, ip2, ip3 port = port1
type DB type DB如下表所示。 方法 描述 返回值 (db *DB)Begin() 开启一个事务,事务的隔离级别由驱动决定。 *Tx, error (db *DB)BeginTx(ctx context.Context, opts *TxOptions) 开启一个给定
者与当前表字段数目不匹配时,由服务端返回错误。 PBE特性支持增、删、改操作,批量操作时 U 报文最大长度限制 为1GB - 1B,即0x3fffffff字节。超出长度限制会报bind message length XXX too long. This can be caused
type Tx type Tx如下表所示。 方法 描述 返回值 (tx *Tx)Commit() 提交事务。 error (tx *Tx)Exec(query string, args ...interface{}) 执行一个不返回数据行的操作。 Result, error (tx
type Row type Row如下所示。 方法 描述 返回值 (r *Row)Scan(dest ...interface{}) 将当前数据行中的列复制到dest指向的值中。 error (r *Row)Err() 返回执行过程中出现的错误。 error 参数说明 参数 参数说明
ecpg预处理以及编译执行 准备嵌入式SQL-C源程序,以.pgc为后缀名,ecpg负责将其转换成可被编译器编译的C语言程序。 生成的C语言程序被编译器编译为可执行文件,运行该可执行文件实现客户端程序访问数据库。示例请参见常用示例章节。 ecpg预处理以及编译处理过程 预处理:ecpg
事务管理 在ecpg缺省模式下,语句只有在EXEC SQL COMMIT发出的时候才被提交,嵌入的SQL接口也支持事务的自动提交(通过EXEC SQL SET AUTOCOMMIT TO ON语句设置自动提交)。在自动提交模式下,每条命令都是自动提交的,除非它们包围在一个明确的事务块里。自动提交模式可以用EXEC
处理字符串 处理SQL字符串数据类型(例如:varchar、text),有两种方式来声明宿主变量: 方式一:使用char[](一个char字符串),C语言程序中处理字符数据最常见的方式。 EXEC SQL BEGIN DECLARE SECTION; char str[50];
执行动态SQL语句 在大多数情况下,应用程序执行的SQL语句在编写应用程序时必须是已知的。但是在某些情况下,SQL语句是在运行时构造好的,或由外部源提供的。这种情况下不能将SQL语句直接嵌入到C语言源代码中,但是动态SQL语句支持通过一个字符串变量调用所提供的SQL语句。 执行没有结果集的语句
define和undef指令 嵌入式 SQL具有类似于C语言中#define指令: EXEC SQL DEFINE name; EXEC SQL DEFINE name value; EXEC SQL UNDEF name; 示例如下: /* 定义名称 */ EXEC SQL DEFINE
时间戳类型 表1列出了ecpg提供的时间戳(timestamp)数据的常用接口: 表1 时间戳类型常用接口 API接口 接口描述 说明 timestamp PGTYPEStimestamp_from_asc(char *str, char **endptr) 从文本解析一个时间戳并放到一个时间戳变量中。
Hash Join (2,3) | 23091 | 16 | 58.353..355.674 2 | -> Seq Scan on t1 | 2149 | 8 | 0.000..31.490 3 | -> Hash
rows(t1 t2 t3 *1000)表示:指定t1、t2、t3 join完的结果集的行数乘以1000。 建议 推荐使用两个表*的hint。对于两个表的采用*操作符的hint,只要两个表出现在join的两端,都会触发hint。例如:设置hint为rows(t1 t2 * 3),对于(t1
以指定相应的leading,join,rows hint将不使用,例如:t1 t2 t3表join,t1和t2, t2和t3有等值连接条件,则t1和t3不会优先连接,leading(t1 t3)不会被使用。 如果子链接未被提升,则blockname hint不会被使用。 父主题:
from t2 where c1 in( select /*+ use_hash_agg */ t1.c1 from t1,t3 where t1.c1=t3.c1 group by 1); QUERY PLAN
1 | 1 2 | 2 3 | 3 (3 rows) gaussdb=# select * from t2 order by c2; c1 | c2 ----+---- 1 | 1 2 | 2 3 | 3 4 | 4 4 | 4