用于sqlalchemy的异步中间件

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


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

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

用法

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

from asyncio import coroutine
from metapensiero.sqlalchemy.asyncio 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 metapensiero.sqlalchemy.asyncio 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. 安装pytestpytest-asynciopsycopg2-binarypymysql

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

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

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

更改

1.0(2018-07-01)

  • 重命名为metapensero.sqlalchemy.asyncio

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类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配