问题标签 [aiopg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4199 浏览

python - Using asyncio nested_future() and gather() with nested loops

While trying to execute some async functions in parallel, I am always getting an error, which I would like to understand.

Running asyncio on Python 3.5.1, I'm combining aiohttp through the ClientSession and aiopg (asynchronous psycopg2) calls.

The main idea is that I have a loop to read rows from one table, to loop on the rows and to execute in parallel several calls to the function row_loop which will start asynchronously a web request GET and then through another cursor write to the same DB the result for each row.

The ensure_future() and gather() seems to work properly, but only the first DB write goes through, the other result in an exception complaining about another coroutine already waiting.

The issue could be in the aiopg library or might be that I am registering the loop against main and not against the function where .gather() actually happens. But I could find very little documentation about it...

Without using ensure_future() and gather(), the code is slow since each call is done one after each other. I might not have understood well the purpose of gather() and I might need a real multithreading solution, but I would like to test this intermediary step first.

Here is my actual code:

0 投票
1 回答
1771 浏览

postgresql - aiopg/psycopg2 自动提交和事务

我的怀疑是非常 SQLish 但

由于 psycopg2 异步连接是自动提交的,我手动设置定义的事务,然后在同一个游标/连接中关闭。

像这样:

我的疑问是,由于它完全异步,如果有回滚,在同一时间跨度内处理的其他命令也会回滚还是基于连接回滚?

谢谢!!

0 投票
1 回答
724 浏览

postgresql - Copy_from 在 aiopg 中不起作用

这是我试图在 aiopg 和数据中执行的查询。我不知道它为什么会失败。

该脚本工作正常,除了表中没有行。

如果我评论该drop table行,它会引发异常(表已存在)。如果我在 PgAdmin 中删除 teable,脚本会正常创建它。问题是为什么没有插入行。我尝试了有无sep=',',没有区别。

我试着打开日志级别postgresql.conf来注意,仍然没有效果。执行查询时不会记录任何内容。

我在进行查询之前尝试添加此行:

还是什么也没看到。我已将所有内容设置为debug1in postgresql.conf,并且只看到了这个:

可能 copy_from 的工作方式与执行不同。但是,如果我使 create table 语句同步,它会失败:

Postgres 驱动程序引发异常:

因此,它确实尝试将数据加载到表中。

我想知道它是否默默地无法读取 CSV 格式。但不知道出了什么问题。

0 投票
1 回答
224 浏览

python - 如何提高许多附加到列表的性能?

如何提高以下代码的性能?

我不想每次都检查if row[0] not in BANNED_DOORBOTS。如何避免这种情况?

通常,我在records. 也许我可以预先分配一些空间以避免重新分配?

0 投票
1 回答
152 浏览

python - Python aiopg lastrowid

我正在使用 asyncio 和 aiopg,在 INSERT 执行后我无法获取 lastrowid。

我的代码:

执行工作,但 lastrowid 不打印,下一次打印也是。

如果我执行 SELECT,则与 fetchone() 和 fetchall() 相同。

0 投票
1 回答
542 浏览

python - AttributeError:“PGDialect_psycopg2”对象没有属性“dbapi_type_map”

更新 python 服务器上的所有插件后,它现在引发

插件列表

0 投票
0 回答
634 浏览

python - 如何将 aiopg 与 aiohttp 一起使用

我有一个应用程序,它遍历来自 Postgres 表的批量 URL:s,下载 URL,在每次下载时运行处理函数并将处理结果保存到表中。

我使用 aiopg 和 aiohttp 编写了它以使其异步运行。在简化形式中,它看起来像:

但有些不对劲。脚本运行的时间越长,运行的越慢,调用session.get. 我的猜测是我使用 Postgres 连接的方式有问题,但我不知道出了什么问题。任何帮助将非常感激!

0 投票
0 回答
2922 浏览

django - django ORM 与 asyncio

我正在寻找可以允许将 Django ORM 与 asyncio(使用 PostgreSQL)一起使用的东西。到目前为止,我在 asyncio 生态系统中只发现了aiopg,它允许运行原始 SQL 或仅使用 SQLAlchemy。

然后我在django 频道文档中找到了一些东西。这是:

https://github.com/django/channels/blob/master/channels/db.py

我正在寻找的缺失部分?

谢谢

0 投票
1 回答
1500 浏览

python-3.x - 使用 pytest、tornado 和 aiopg 进行单元测试失败,任何查询都失败

我有一个在 Python 3.7 + Tornado 5 上运行的 REST API,使用 postgresql 作为数据库,使用带有 SQLAlchemy 核心的 aiopg(通过 aiopg.sa 绑定)。对于单元测试,我使用 py.test 和 pytest-tornado。

只要不涉及对数据库的查询,所有测试都会正常进行,我会得到这个:

运行时错误:任务 cb=[IOLoop.add_future..() at venv/lib/python3.7/site-packages/tornado/ioloop.py:719]> 将 Future 附加到另一个循环

相同的代码在测试中运行良好,到目前为止我能够处理 100 个请求。

这是 @auth 装饰器的一部分,它将检查 JWT 令牌的 Authorization 标头,对其进行解码并获取用户的数据并将其附加到请求中;这是查询的一部分:

Partner 的 .get() 异步方法来自应用程序中所有模型的基类。这是 .get 方法的实现:

上面的 .get() 方法将返回模型实例(行表示)或无。

它使用 db.acquire() 上下文管理器,如 aiopg 的文档中所述:https ://aiopg.readthedocs.io/en/stable/sa.html 。

如同一文档中所述, sa.create_engine() 方法返回一个连接池,因此 db.acquire() 仅使用池中的一个连接。我将这个池共享给 Tornado 中的每个请求,他们在需要时使用它来执行查询。

这是我在 conftest.py 中设置的夹具:

我无法解释为什么会发生这种情况;Tornado 的文档和源代码清楚地表明默认使用 asyncIO 事件循环,通过调试它我可以看到事件循环确实是同一个,但由于某种原因它似乎突然关闭或停止。

这是一项失败的测试:

此测试失败,因为它返回 401 而不是 204,因为对 auth 装饰器的查询由于 RuntimeError 而失败,然后返回未经授权的响应。

这里的异步专家的任何想法都将不胜感激,我对此非常迷茫!!!

0 投票
0 回答
449 浏览

python-asyncio - 如何使用协程处理 postgres 数据库

我们正在使用 asyncio 框架(在我们的例子中为 aiohttp)构建一个后端服务。

我们正在使用 aiopg 对数据库进行查询。

由于这是单线程服务器,因此进行数据库查询的正确实现模式是什么:

1)服务器应该只保留一个连接,每个协程应该只是aquire()该连接对象上的一个新光标?

或者

2)服务器应该为每个协程打开一个新连接?

关于场景(1)的问题:它是否保证并发?await cursor.execute()数据库可以在一个连接上运行多个异步查询吗?我很确定在非异步模式下,相同连接上的游标会被简单地序列化。使用异步时这有什么不同吗?如果是,可以同时获取的光标的最大限制是多少?

关于场景 (2) 的问题:对于单线程异步服务器来说,这是一个有效的场景吗?