用于sqlalchemy的异步中间件

arstecnica.sqlalchemy.async的Python项目详细描述


aiopgaiomysql项目允许使用 ^分别是{a3}和MySQL,甚至是通过SQLAlchemy。他们的 不过,这种方法并不理想,因为它们重新实现了 含有不良故障的SA低水平物质的数量。

基于TwistedAlchimia方式要轻得多,即使可能 性能稍差,不会带来意外惊喜。

用法

基本上,该模块包装了一组最小的sa类(当前 EngineConnectionTransactionResultProxy)进入 异步对应项,您对它们进行如下处理 示例:

from asyncio import coroutine
from arstecnica.sqlalchemy.async import create_engine

@coroutine
def do_something(db_url):
    engine = create_engine(db_url)
    with (yield from engine.connect()) as conn:
        with (yield from conn.begin()) as trans:
            yield from conn.execute(users.insert()
                                    .values(id=42, name="Async",))

        res = yield from conn.execute(users.select()
                                      .where(users.c.id == 42))
        rows = yield from res.fetchall()

        res = yield from conn.execute(users.delete()
                                      .where(users.c.id == 42))
        assert res.rowcount == 1

如果您使用的是Python3.5或更高版本,则应将上面的代码编写为:

from arstecnica.sqlalchemy.async import create_engine

async def do_something(db_url):
    engine = create_engine(db_url)
    async with await engine.connect() as conn:
        async with await conn.begin() as trans:
            await conn.execute(users.insert()
                               .values(id=42, name="Async",))

        res = await conn.execute(users.select()
                                 .where(users.c.id == 42))
        rows = await res.fetchall()

        res = await conn.execute(users.delete()
                                 .where(users.c.id == 42))
        assert res.rowcount == 1

测试

要运行单元测试,您应该:

  1. 创建一个python虚拟环境并在 开发模式:

    python3 -m venv env
    source env/bin/activate
    python setup.py develop
    
  2. 安装pytestpsycopg2pymysql

    pip install pytest psycopg2 pymysql
    
  3. 创建测试数据库,例如使用createdb testdb

  4. 使用环境变量执行py.testrunner 数据库的sa url:

    TEST_DB_URL="postgresql://localhost/testdb" py.test src
    TEST_DB_URL="mysql+pymysql://localhost/testdb" py.test src
    

更改

0.4(2015-09-25)

  • 包装调整

0.3(2015-09-23)

  • 支持Python3.5异步上下文管理器

0.2(2015-09-09)

  • pypi上的第一个(可用)分布

0.1(私人)

效果相当不错!

0.0(私人)

最初的努力。

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

推荐PyPI第三方库


热门话题
java如何使用onClick将用户发送到ChatActivity   javax。imageio Java将TIff转换为PNG问题   java Swing计时器和耗时的任务   php注释的java正则表达式   当VPN连接处于活动状态时,java无法从Google Play Store下载   java如何使用jaxws和wsgen定制web服务响应?   java Netflix Hollow与集合API   itext 7中无法识别java字体类型   数组Java错误“JASONArray的方法optString(i)未定义”   java在hbase行中使用相同的系列存储多个版本:限定符,但时间戳不同。   java Android列表视图在某些设备中显示完整的项目,但在不同的Android设备中缺少某些内容   Java中用于唯一Id的多线程序列生成器   java IntelliJ IDEA:什么是SDK?   行尾如何规范Java中的EOL字符?   2010年4月5日,字符串必须转换为Java中的日期   java Arraylist未转换为字符串数组   算法映射周期值(java)   java如何在点击图像时生成事件?   java ViewResolver不解析为视图名称,而是解析为RequestMapping值