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如何处理CannotCreateTransactionException   安卓如何通过TensorFlowEnferenceInterface提供布尔占位符。JAVA   java是一个系统。出来默认情况下println线程安全?   java关于同步的重要性   java非法启动表达式/尚未对编码充满信心欢迎帮助   安卓为什么XML和Java中的ImageView测量不同?   Android乘以双精度整数[java]   java如何将下一个数组项设置为变量的新值?   java编译ikvmc pwswiftcoreXXXX。jar作为clr。动态链接库   java测试没有单元测试调用的私有方法   在java中如何划分重复的正则表达式模式?   java活动不刷新onCreate()中的布局   Java用户输入nextLine()不等待输入   oracle11g用java编写ORACLE BLOB文件   mysql如何在Java程序中使用Hibernate?   java ADF从托管bean调用有界taskflow