AsyncPg的SqlAlchemy适配器

metapensiero.sqlalchemy.asyncpg的Python项目详细描述


author:Lele Gaifax
contact:lele@metapensiero.it
license:GNU General Public License version 3 or later

这是一个python 3包,从专有的Ytefas应用程序派生而来 实现通过asyncpg在 比asyncpgsa更干净的方式(当然,我有偏见):主要的区别在于 使用显式类型的参数占位符,以避免最初的the problem 促使我写这个包裹。

它发出带有prettifiedsql语句的DEBUG日志,并将参数解析为 实际的values,并提供了metapensiero.sqlalchemy.proxy的asyncpg变体 是ProxiedQuery

典型用法

以下脚本:

importasynciofromdatetimeimportdateimportloggingimportsqlalchemyassafromasyncpgimportcreate_poolfromasyncpg.typesimportRangefrommetapensiero.sqlalchemyimportasyncpgassasyncpgasyncdefdml_tests(connection):sasyncpg_test=sa.Table('sasyncpg_test',sa.MetaData(),sa.Column('id',sa.types.Integer,primary_key=True),sa.Column('value',sa.types.Text),sa.Column('period',sa.dialects.postgresql.DATERANGE))value='First test'insert_stmt=sasyncpg_test.insert().values(id=1,value=value)awaitconnection.execute(insert_stmt)new_value='Second test'update_stmt=(sasyncpg_test.update().values(value=new_value,period=Range(date(2016,2,1),date(2016,3,1))).where(sasyncpg_test.c.id==1))awaitconnection.execute(update_stmt)select_stmt=(sa.select([sasyncpg_test.c.value]).where(sasyncpg_test.c.id==sa.bindparam('id')))forrowinawaitconnection.fetchall(select_stmt,named_args={'id':1}):print('Row:',row)single_row=(sa.select([sasyncpg_test]).where(sasyncpg_test.c.period.contains(date(2016,2,15))))print('Row:',awaitconnection.fetchone(single_row))asyncdefrun(loop):pool=awaitcreate_pool(database="test",loop=loop)asyncwithpool.acquire()asapgc:connection=sasyncpg.Connection(apgc)query=sa.select([sa.func.version()])result=awaitconnection.scalar(query)print("PostgreSQL version:",result)awaitconnection.execute('create table sasyncpg_test ('' id integer not null primary key,'' value text,'' period daterange)')try:awaitdml_tests(connection)finally:awaitconnection.execute('DROP TABLE sasyncpg_test')defmain():loop=asyncio.get_event_loop()loop.run_until_complete(run(loop))if__name__=='__main__':logging.basicConfig(level=logging.DEBUG)main()

生成如下内容:

DEBUG:asyncio:Using selector: EpollSelector
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Fetching scalar in transaction 9ddb60:
    SELECT version() AS version_1
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Fetched value in 869 µsec
PostgreSQL version: PostgreSQL 9.6.6 on x86_64-pc-linux-gnu, compiled by gcc (Debian 7.2.0-12) 7.2.1 20171025, 64-bit
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Executing in transaction 9ddb60:
    CREATE TABLE sasyncpg_test (
        id integer NOT NULL PRIMARY KEY, value text, period daterange
    )
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Execution took 97.1 msec
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Executing in transaction 9ddb60:
    INSERT INTO sasyncpg_test (id, value)
    VALUES (1::integer, 'First test'::text)
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Execution took 1.26 msec
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Executing in transaction 9ddb60:
    UPDATE sasyncpg_test
    SET value = 'Second test'::text, period = '[2016-02-01,2016-03-01)'::daterange
    WHERE sasyncpg_test.id = 1::integer
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Execution took 14.1 msec
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Fetching rows in transaction 9ddb60:
    SELECT sasyncpg_test.value
    FROM sasyncpg_test
    WHERE sasyncpg_test.id = 1::integer
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Fetched 1 records in 909 µsec
Row: <Record value='Second test'>
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Fetching row in transaction 9ddb60:
    SELECT sasyncpg_test.id, sasyncpg_test.value, sasyncpg_test.period
    FROM sasyncpg_test
    WHERE sasyncpg_test.period @> datetime.date(2016, 2, 15)::date
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Fetched one record in 951 µsec
Row: <Record id=1 value='Second test' period=<Range [datetime.date(2016, 2, 1), datetime.date(2016, 3, 1))>>
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Executing in transaction 9ddb60:
    DROP TABLE sasyncpg_test RESTRICT
DEBUG:metapensiero.sqlalchemy.asyncpg.funcs:Execution took 12 msec

更改

0.1(2017-12-03)

  • 独立软件包,在GPLv3下发布

0.0(未发布)

  • 最初的努力。

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

推荐PyPI第三方库


热门话题
java我的int值在SharedReferences中不被记住   java如何编辑Spring可分页对象?   java如何在gradle中单独调用任务   jvm以编程方式设置最大java堆大小   java如果满足多个条件,如何使用If语句计算数字?   如何在java中从json文件中获取特定值   如何在Sphinx4中为Java语音识别添加自定义语法?   java int[]copy=data;//当数据是数组时会发生什么?   java豪猪管理器。停下来。destroy()不起作用   安卓在API级别28中找不到画布变量   基于SOLID的java冗余   用于talend作业的java Liferay和portlet   从java到安卓的视频流   java获取在控件的类定义中添加自定义控件的场景大小   awt Java IndexOutOfBoundsException   java如何使用Spring JmsTemplate更改MQ头   java遍历数组并打印每个对象   java Google Map api v2标记在我旋转手机和地图“刷新”之前不会移动