postgresql数据库包装器-提供psycopg2上的包装器,支持公共sql函数、事务和池的python api

pypgwrap的Python项目详细描述


pypgwrap-高效的postgresql数据库包装器
----------


"efficient"模块在psycopg2上提供了一个高效的包装器,支持一个用于常见sql函数、显式和隐式事务机制以及连接池的python api。

这并不是为了提供类似于orm的功能,只是为了让它更容易与来自python代码的postgresql进行交互,以实现简单的用例
,并允许直接sql访问更复杂的操作。

除了池之外,功能性都是由后台提供的。


模块提供:

*简化了对连接/光标的处理
*连接池,单线程或多线程(由psycopg2.pool继承)
*光标上下文处理程序
*content用于显式事务的XT管理器)(来自pgwrap)
*查询结果为dict(使用psycopg2.extras.dictcursor)
*可调用的准备好的语句
*日志记录支持


基本用法
----

>;>;导入pypgwrap
>;>;pypgwrap.config_pool(max_pool=10,pool_expiration=1,url='postgres://localhost/',pool_manager=simpleconnectionpool)
>;>db=pypgwrap.connection()
>;>db.cursor()为c:
…c.query('select version()')
['postgresql…']
>;>v=db.query_one('select version()')
>;>v
['postgresql…']
>;>v.items()
[('version','postgresql…')]
>;v['version']
'postgresql…'


基本用法,事务
——
init pool在应用程序启动时:

>;>import pypgwrap
>;>pypgwrap.config_pool(max_pool=10,pool_expiration=1,url='postgres://localhost/',pool_manager=simpleconnectionpool)

IT事务:

>;>db=pypgwrap.connection()
>;>db.create_table('t1','''id serial primary key,
名称文本不为空,
计数整数不为空默认值0,
活动布尔值非空默认值为真')
>;>id0=db.insert('doctest_t1',{'name':'name_one',returning='id')['id']
>;>id1=db.insert('doctest_t1',{'name':'name_two'},returning='id')['id']
>;>db.commit()

隐式事务:

>;>;使用pypgwrap.connection()作为db:
>;>;db.创建表('t1','''id serial primary key,
名称文本不为空,
计数整数不为numl默认值0,
active boolean not null默认值true')
>;>id0=db.insert('doctest_t1',{'name':'name_one'},returning='id')['id']
>;>id1=db.insert('doctest_t1',{'name':'name_two'},returning='id')['id']

分布式事务:

>;>import uuid
>;>key=uuid.uuid4()

>;>pypgwrap.connection(key=key)为db:
>;>db.创建表('t1',''id串行主键,
名称文本不为空,
计数整数不为空默认值0,
活动布尔值不为空默认值真')
>;>;id0=db.insert('doctest_t1',{'name':'name_one'},returning='id')['id']
>;>;id1=db.insert('doctest_t1',{'name':'name_two'},returning='id')['id']

>;>;db2=pypgwrap.connection(key=key)
>;>;id3=db.insert('doctest_t1',{'name':'name_three'},返回'id')['id']
>;>id4=db.insert('doctest_t1',{'name':'name_four'},返回'id')['id']


>;>db3=pypgwrap.connection(key=key)
>;>db3.commit()

管理器:

>;>pypgwrap.contextmanager()作为上下文:

>;>pypgwrap.connection(key=context.key)作为db:
>;>db.create_table('t1',''id serial primary key,
name text不为空,
计数整数不为空默认值0,
活动布尔值不为空默认值真')
>;>id0=db.insert('doctest_t1',{'name':'name_one'},returning='id')['id']
>>gt;id1=db.insert('doctest_t1',{'name':'name_two'},returning='id')['id']

>;>;db2=pypgwrap.connection(key)
>;>;id3=db.insert('doctest_t1',{'name':'name_three'},returning='id')['id']
>;>;id4=db.insert('doctest_t1',{'name':'name_four'},返回'id')['id']



connection
--



config_pool需要一些参数:
-max_pool:在内存中创建和维护的最大连接数
-pool_expiration:close和des的空闲时间(分钟)troy memory connection
-url:带有连接参数的url

此方法的目的是仅在应用程序启动时调用!

connection类提供返回游标对象或直接执行sql查询的方法(使用隐式游标)。


connection上下文提供以下基本方法:

cursor-创建游标类的新实例-提交事务(在退出上下文处理程序时隐式调用)
rollback-rollback事务

----

>模块提供一个包装psycopg2光标的游标上下文处理程序。

cursor对象默认使用psycopg2"dictcursor"(which
以伪python字典的形式返回行),但是可以通过向构造函数提供一个"cursor_factory"参数来覆盖它。c.query('select version()')
['postgresql…']


光标上下文提供了以下基本方法:

execute-执行sql查询并返回行数
query-执行sql查询并获取结果
query一-执行sql查询和fetch first result
query_dict-执行SQL查询并返回dict
键入指定键(应该是唯一的)的结果

此外,游标可以使用下面描述的SQL API方法或访问底层的psycopg2游标(通过self.cursor属性)。

在隐式cursor对象中运行。

----


cursor类还为常见的sql
操作提供了一个简单的python api。提供的基本方法有:

select-单表选择(带相应的select_one,select_dict methods)
join-双表连接(带相应的join_one,join_dict methods)
insert-sql insert
update-sql update
删除-SQL删除可以对方法进行参数化以自定义关联查询
(有关详细信息,请参见数据库模块):


where-'where'子句作为dict(列运算符可以使用colunm\u运算符格式指定)


where={name':'abc','st在':(1,2,3)}


列-要返回的列的列表-这些列可以是实列或表达式。如果spefified
作为元组,则使用as运算符显式命名列


columns=('name',('status>;1','updated'))

order-sort order as list(使用'column\u desc'来
逆序)

order=('name_uu desc',)


limit-行限制(int)


offset-偏移量(int)

on-联接列(作为元组)

values-插入数据作为dict

-要返回的列(字符串)

_id int,value text')
>;>db.log=sys.stdout
>;>db.insert('t1',{'name':'abc','count':0},returning='id,name')
insert into t1(name)values('abc')返回id,name
[1,'abc']
>;>db.insert('t2',{'t1'u id':1,'value':'t2})
insert进入t2(t1-id,value)值(1,'t2')
1
>;>db。select('t1')
select*from t1
[[1,'abc',0]]
>;>db。选择"u-one('t1',where={'name':'abc'},columns=('name','count'))
选择名称,count from t1 where name='abc'
['abc',0]
>>>gt;db.join(('t1','t2'),columns=('t1.id','t2.value'))
从t1.id=t2.t1上的t1 join t2中选择t1.id,t2.value
[[1,'t2']
>>>db.insert('t1',{'name':'abc'},returning='id')
insert into t1(name)values('abc')返回id
[2]
>>gt;db.update('t1',{'name':'xyz'},其中={'name':'abc'})
update t1 set name='xyz'其中name='abc'
2
>;>db.update('t1',{'count'func':'count+1'},其中={'count'lt':10},返回"id,count")
update t1 set count=count+1其中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时使用的方法。d
(默认为"query")

其中id=$1')
将pstmt_001准备为update t1 set name=$2其中id=$1
>;>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')
准备_pstmt_001作为更新T1 set name=$2,其中id=$1
>;>p.execute(1,"xxx")
execute _pstmt_001(1,"xxx")
>;>p(1,"xxx")
execute _pstmt_001(1,"xxx")

logging
----

日志属性可以设置为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.0 03-06-2013初始导入
*0.1.1 10-06-2013事务上下文问题
*0.1.2 11-06-2013 ContextManager提交问题
*0.1.3 07-08-2013 ContextManager退出失败异常
*0.1.4 07-08-2013 ContextManager退出失败,类型错误异常
*0.1.5 08-10-2013-当池被检查或达到Postgres的最大值时,线程连接池修复。
-在配置池M中创建参数[池管理器]方法。参数:simpleconnectionpool,
threadedconnectionpool。在多线程环境中,必须使用threadedconnectionpool。
*0.1.6 14-10-2014-错误修复。修复操作错误的导入。避免使用psycopg2的受保护成员。
-将"psycopg2.\psycopg导入操作错误"更改为"psycopg2导入操作错误"
*0.1.11 04-09-2015要与pgpoo一起使用的非线程自动关闭连接池l
*0.1.12 04-09-2015删除类autocloseconnectionpool。
-在env pypgwrap_close_connection_on_exit中创建配置,以控制禁用pypgwrap池时的
。当此env变量为true时,执行完成时将丢弃所有连接
。没有持久化池。util与
pgpool或外部池工具一起使用。
*0.1.13 17-09-2015修复ast.literal_eval的使用以读取环境变量
*0.1.14 27-10-2015更改设置以删除对psycopg2的安装要求
*0.1.15 18-03-2016在env pypgwrap_autocommit中创建配置,以避免pgbouncer出现问题
*0.1.16 18-03-2016 idem最新版本的错误修复


author
----


master repository/issues
--------

*https://github.com/ephillipe/pypgwrap


credits
----
pypgwrap继承自pgwrap,一个优秀的Postgres包装器,但缺少
*https://github.com/paulchakravarti/pgwrap

pooling继承自psycopg2
*https://github.com/psycopg/psycopg2/

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

推荐PyPI第三方库


热门话题
java无法在spring boot应用程序中启用本机内存跟踪   jakarta ee在Java Web项目上的多窗口   日期将Java时间戳转换为MySQL时间戳,反之亦然   java如何实现异步任务连接到服务器并解析JSON   java为什么我得到索引越界异常?   我们如何在java中以大写字母和小写字母存储同名文件   jni/java:有效不可变本机对象的线程安全发布/共享   Java将文本写入远程文件   int最小硬币算法   java如何设置/获取我在类Vehicle的主方法中创建的类Car的“ford”实例的名称?   java使用计时器在队列已满时重新调度使用者   java从字符串的末尾提取一个子字符串,直到遇到第一个空格为止?   java在SimpleApplication之外正确初始化物理状态