Psycopg2模块试用

三 21st, 2012

最近,在GP上执行ETL测试的时候,感觉重复的动作太多,常常会window/linux切换,对于sql语句也没有一个很好的检查机制,最后管理这些脚本也不太方便。最后,我下定决心,重新用python来改写一个gpunit的框架,这里我只介绍该框架中用到db模块——Psycopg2

选择使用这个模块来做DB相关的操作,也完全是一个巧合,不做过多解释,我没去比较常见几个模块的优缺点,只是图方便而已。

1. 下载及安装:

去官网选择一个对应的版本下载,我的环境是python 2.7 windows 64位,就直接下载相应的即可:

地址:  http://www.stickpeople.com/projects/python/win-psycopg/

执行下载的exe文件,无须再做其他的操作,该环境就已经准备好了!

2. 数据库连接

我们都知道,要想对数据库进行操作,第一步肯定就是先练上该库,以我们的测试库为例:

     host=‘10.**.***.**’,

port=5432,

user=’etltest’,

password=’etltest’,

database=’test’

于是,我们链接PostgreSQL(GP的客户端实际上就是postgresql)并设定Cursor ,代码如下:

import os
import psycopg2
import psycopg2.extras
import dbassert

class DBCommon:
    cur = psycopg2.extensions.cursor

    def __init__(self):
        #可以改为读取database.cfg配置,来连接到不同的GP库
        conn = psycopg2.connect(host='10.*.*.*',port=5132,user='gptest',password='gptest'
,database='alig'')
        self.cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)

psycopg2.extras.DictCursor是指创建一个字典Cursor, 这样返回的数据, 都是字典的形式, 方便使用。

3.  数据库操作(增删改查)

其实重点就在如何去执行一个sql的,所以对上述的要求还是很好满足的!都是封装在一个execute函数就可以了。如下:

cursor.execute(‘SELECT count(1)  FROM test_01)

重点是如何取得这个值了,只能通过fetchone(), fetchall()和fetchmany()三种形式取得结果集。

def executeSql(self,sql):
     self.cur.execute(sql)
     items = self.cur.fetchall()
     #print items[0]
     return items

当然,对于sql语句而言,有些是执行,并不需要获取返回的结果,对于这些INSERT, UPDATE, DELETE的sql脚本, 都需要conn.commit()提交一下, 才会把数据提交到数据库。如下:

cursor.execute(‘INSERT INTO test (a, b) VALUES (%s, %s) RETURNING id;’, (‘a’, ‘b’))
item = cursor.fetchone()

4. 查看生成的sql脚本和查看上一条执行的脚本

cur.mogrify(‘SELECT * FROM test WHERE a = %s AND b = %s;’, (‘a’, ‘b’))
cur.query           #可读属性

mogrify()函数会返回生成的sql脚本, 用以查看生成的sql是否正确.

几点注意的地方:

sql脚本必须以;结尾, 不可以省略.

其次, 不管sql中有几个参数, 都需要用%s代替, 只有%s.

最后, 第二个参数中, 一定要传如元祖, 哪怕只有一个元素, 像我刚才的例子一样, (5)这样是不行的.

当然,后面我会将我弄的这个框架开源出来,到时候,可以再仔细讲讲这个项目的设计和构思。下次有计划再聊!





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51607

订阅本站:http://www.wangyuxiong.com/feed

分类: 工作笔记 测试技术         标签: , , ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量