简单的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android上已连接音频输入设备的java列表   java是创建类的新对象还是使用静态方法?   Java:Shift/Rotate对象数组   Java Casting ArrayIterator<Object>   在java中返回布尔值时出错   无法确定文本文件读入程序(java)中的各种元素   Java Swing JToolBar   JAVAlang.IllegalStateException执行Ghost4J(Linux 32对64位)   jvm如何增加ubuntu系统的java堆化?   java CORS策略“AccessControlAllowOrigin”(Anguar 8和Servlet)   使用dagger 2的java视图依赖项注入   单元测试中RxJava的java模拟活动生命周期   arraylist中的Java打印字符串   java返回值显示为0.0。为什么会这样?   java是clientserver应用程序所必需的MVC吗?   ByteToMessageDecoder类中的java内存泄漏   java将大量文档写入firestore   GWT项目中的java TomcatMaven插件。两者之间的区别是什么:org。科德豪斯。魔咒和组织。阿帕奇。公猫maven插件   java swing:向JTree项添加自定义图形按钮