简单的postgresql数据库包装器-提供psycopg2上的包装器,支持公共sql函数的python api(支持py2/py3)
pgwrap的Python项目详细描述
pgwrap-简单的postgresql数据库包装器
---------------------------
"pgwrap"模块为psycopg2提供了一个简单的包装器,该包装器支持用于常见sql函数的
python api。
对于简单的用例,让它更容易与python代码中的postgresql进行交互,并允许对更复杂的操作进行直接的sql访问。
该模块包装了优秀的"psycopg2"库,并且大多数
功能都是由后台提供的。
提供:
*简化连接/光标的处理
*连接池(由psycopg2.pool提供)
*光标上下文处理程序
*包装基本sql功能的python api
*简单的选择、更新、删除、连接方法扩展光标
上下文处理程序(也可以作为独立方法使用,这些方法
为简单查询创建隐式游标)
*查询结果作为dict(使用psycopg2.extras.dict cursor)
*可调用的准备语句
*日志支持
*支持python 2/3
基本用法
----
>;>import pgwrap
>;>db=pgwrap.connection(url='postgres://localhost')
>;>db.cursor()为c:
…c.query('select version()')
['postgresql…']
>;>v=db.query_one('select version()')
>;>v
['postgresql…']
>;>v.items()
[('version','postgresql…')]
>;v['version']
'postgresql…'
连接类初始化内部连接池,并提供
方法以返回游标对象或直接执行SQL查询(使用
隐式游标)。
----
模块提供一个包装psycopg2游标的游标上下文处理程序。
输入游标上下文处理程序将从
连接池获取连接,并使用此连接创建游标。当上下文
处理程序退出时,关联的事务将被提交,游标
关闭,连接释放回连接池。
cursor对象默认使用psycopg2"dictcursor"(它将行作为伪python字典返回),但是通过向构造函数提供一个"cursor_factory"参数,可以覆盖
>;>db=pgwrap.connection(url='postgres://localhost')
>;>db.cursor()作为c:
…c.query('select version()')
['postgresql…']
光标上下文提供了以下基本方法:
execute-执行sql查询并返回行数
query-执行sql查询并获取结果
query一-执行sql查询和fetch first result
query_dict-执行sql query并将结果返回为dict
键入指定的键(应该是唯一的)
commit-commit事务(在退出
上下文处理程序时隐式调用)
回滚-回滚事务
此外,游标可以使用下面描述的sql api方法,或者
访问底层的psycopg2游标(通过self.cursor属性)。
cursor方法也可用作独立函数,在隐式游标对象中运行。.
sql api
----
cursor类还为常见的sql
操作提供了一个简单的python api。提供的基本方法是:
select-单表选择(用相应的select\u one,
select\u dict methods)
join-两表连接(用相应的join\u one,
连接dict方法)
insert-sql insert
update-sql update
delete-sql delete
使用colunm_u运算符格式指定)
where={name':'abc','status_u in':(1,2,3)}
columns-要返回的列列表-这些列可以是实列或表达式。如果spefified
作为元组,则使用as运算符显式命名列
columns=('name',('status>;1','updated'))
order-sort order as list(使用'column_u desc'来
reverse order)
order=("名称描述",)
limit-行限制(int)
offset-offset(int)
on-联接列(作为元组)
values-插入数据作为dict
returning-要返回的列(string)
创建一个
>隐式光标对象。
>基本用法:
>
>gt>gt>gt;db.创建表('t1','id serial,name text,name text,count int')
>gt>gt>gt>gt;db.创建表('t2','id serial,t1,id int,value text')
>gt>gt;db.log=sys.stdout
>gt>gt>gt;db.insert('t1',{'name':'abc','count''abc''abc','count'count'0};返回id,name'name,name,id,name,name,name,name,name,name,text,name,name,name,name,name,)
插入到T1(名称)值('ABC')中插入T1(名称)值('ABC')返回ID,名称
[1,'ABC']
>>>gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;db。插入('T2',{'T1'ID'1,'T1'U ID'ID'1,'T2''ID'1,'T2')
1,'T2')
>;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;':'abc'},c
t;db.join(('T1'T2'),columns=('T1'T2'),columns=('T1.ID','T2.value')))
t;db.join(('T1'T2','T2','T1.ID','T2.value'))
t
t
t>t>t.id,t2.value frot1.id,t2.value frot1.id,t2.t2。t1.id=t2.t1-t2上的t1.id,t2.t1.id,t2.t1.id,t2.t2.t2上的t1.id,t2.id,t2.t2.t2.t2.t2.t1.id,t2.t2.t2.br/>插入T1(NA值('abc')返回id
[2]
>>>gt>gt;db.update('t1',{'name':'xyz'},其中{'name':'abc'})
updatet1 set name='xyz'其中name='abc'
2
>>gt;db.update('t1',{'count'count'funct':'count+1'},其中{'count'count'gt>db.update('t1',{'count'count'count+1'},其中{'count'count'count'count'10},返回id,count'id,count')
>updatet1 set count=count
计数<;10返回id,count
[[1,1]]
prepared statements
----
prepared statements可以使用
>连接创建。prepare(stmt,params,name,call_type)
stmt:prepared statement(使用psql$1在语句中标识参数
,2美元…表示法)
params:可选参数类型列表(通常不需要
由psql推断)
name:准备好的语句的名称(通常
自动生成)
call_type:实例调用为method时使用的方法
(默认为"query")
构造函数返回一个preparedstatement对象,该对象可以在连接中使用
而不是sql语句。execute和
connection.query\xxx方法。
>;>;p=db.prepare('update t1 set name=$2 where id=$1')
prepare\pstmt\u 001 as update t1 set name=$2 where id=$1
>;。>;gt;将db.cursor()作为c:
…c.execute(p,(1,'xxx'))
execute pstmt_001(1,'xxx')
preparedstatement对象也可以使用
execute/query/query_One/query_DICT方法直接调用。实例还可以使用"call_type"中标识的方法类型直接调用
>;>;p=db.prepare('update T1 set name=$2 where id=$1')
prepare_pstmt_001 as update T1 set name=$2 where id=$1
>;>;p.execute(1,'xxx')
execute pstmt_001(1,'xxx')
>;>p(1,'xxx')
执行'u pstmt_001(1,'xxx')
logging
----
以启用日志记录连接。可以将log属性设置为logging.logger的
实例或类似文件的对象(支持write
方法).
日志消息是使用self.logf函数生成的(使用
游标对象作为参数调用)。默认情况下,它只返回
查询字符串,但可以根据需要进行自定义。cursor.timestamp
属性可用于跟踪执行时间。
>;>db.log=sys.stdout
>;>db.log f=lambda c:'[%f]%s%(time.time()-c.timestamp,c.query)
>;>db.query('select*from t1')
[0.000536]选择t*从T1开始
*0.1 19-10-2012初始导入
*0.2 20-10-2012删除设置中的psycopg2 dep.py
*0.3 20-10-2012删除光标的hstore默认值
*0.4 21-10-2012添加日志支持
*0.522-12-2012重构连接类/删除全局变量
*0.6 23-12-2012添加对准备好的语句的支持
*0.7 26-12-2012添加可调用的准备好的语句&命名游标
*0.8 02-02-2019支持python 3(finally)
*paul chakravarti(paul.chakravarti@gmail.com)
主存储库/问题
----
*https://github.com/paulchakravarti/pgwrap