diff options
| -rw-r--r-- | doc/build/changelog/unreleased_14/9048.rst | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/postgresql/asyncpg.py | 2 | ||||
| -rw-r--r-- | test/dialect/postgresql/test_dialect.py | 5 |
3 files changed, 15 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/9048.rst b/doc/build/changelog/unreleased_14/9048.rst new file mode 100644 index 000000000..cf0c81834 --- /dev/null +++ b/doc/build/changelog/unreleased_14/9048.rst @@ -0,0 +1,9 @@ +.. change:: + :tags: bug, postgresql + :tickets: 9048 + :versions: 2.0.0 + + Added support to the asyncpg dialect to return the ``cursor.rowcount`` + value for SELECT statements when available. While this is not a typical use + for ``cursor.rowcount``, the other PostgreSQL dialects generally provide + this value. Pull request courtesy Michael Gorven. diff --git a/lib/sqlalchemy/dialects/postgresql/asyncpg.py b/lib/sqlalchemy/dialects/postgresql/asyncpg.py index 0e3f4b530..e00584503 100644 --- a/lib/sqlalchemy/dialects/postgresql/asyncpg.py +++ b/lib/sqlalchemy/dialects/postgresql/asyncpg.py @@ -483,7 +483,7 @@ class AsyncAdapt_asyncpg_cursor: status = prepared_stmt.get_statusmsg() reg = re.match( - r"(?:UPDATE|DELETE|INSERT \d+) (\d+)", status + r"(?:SELECT|UPDATE|DELETE|INSERT \d+) (\d+)", status ) if reg: self.rowcount = int(reg.group(1)) diff --git a/test/dialect/postgresql/test_dialect.py b/test/dialect/postgresql/test_dialect.py index e8d9a8eb6..78f561a35 100644 --- a/test/dialect/postgresql/test_dialect.py +++ b/test/dialect/postgresql/test_dialect.py @@ -1140,6 +1140,11 @@ $$ LANGUAGE plpgsql; TransactionStatus.INTRANS, ) + def test_select_rowcount(self): + conn = testing.db.connect() + cursor = conn.exec_driver_sql("SELECT 1") + eq_(cursor.rowcount, 1) + class Psycopg3Test(fixtures.TestBase): __only_on__ = ("postgresql+psycopg",) |
