Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Commit 66cc9aa

Browse files
committed
Test case for issue #102: asyncpg can't iterate from outside a transaction
1 parent 2820ea4 commit 66cc9aa

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

tests/test_databases.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,3 +699,24 @@ async def test_database_url_interface(database_url):
699699
async with Database(database_url) as database:
700700
assert isinstance(database.url, DatabaseURL)
701701
assert database.url == database_url
702+
703+
704+
@pytest.mark.parametrize("database_url", DATABASE_URLS)
705+
@async_adapter
706+
async def test_iterate_outside_transaction(database_url):
707+
"""
708+
Ensure `iterate()` works even without a transaction on all drivers.
709+
710+
The asyncpg driver relies on server-side cursors without hold
711+
for iteration, which requires a transaction to be created.
712+
This is mentionned in both their documentation and their test suite.
713+
"""
714+
async with Database(database_url) as database:
715+
query = "SELECT * FROM (VALUES (1), (2), (3), (4), (5)) as t"
716+
iterate_results = []
717+
718+
async for result in database.iterate(query=query):
719+
iterate_results.append(result)
720+
721+
assert len(iterate_results) == 5
722+
assert iterate_results == [(1,), (2,), (3,), (4,), (5,)]

0 commit comments

Comments
 (0)