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

Commit 647aea3

Browse files
authored
Merge pull request #150 from gnat/execute-return-rows-affected-mysql-sqlite
Fix: execute() should return rows affected by operation if lastrowid is not set.
2 parents 57197d7 + ff54d4c commit 647aea3

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

databases/backends/mysql.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ async def execute(self, query: ClauseElement) -> typing.Any:
131131
cursor = await self._connection.cursor()
132132
try:
133133
await cursor.execute(query, args)
134+
if cursor.lastrowid == 0:
135+
return cursor.rowcount
134136
return cursor.lastrowid
135137
finally:
136138
await cursor.close()

databases/backends/sqlite.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,14 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[typing.Mappin
111111
async def execute(self, query: ClauseElement) -> typing.Any:
112112
assert self._connection is not None, "Connection is not acquired"
113113
query, args, context = self._compile(query)
114-
cursor = await self._connection.execute(query, args)
115-
await cursor.close()
116-
return cursor.lastrowid
114+
cursor = await self._connection.cursor()
115+
try:
116+
await cursor.execute(query, args)
117+
if cursor.lastrowid == 0:
118+
return cursor.rowcount
119+
return cursor.lastrowid
120+
finally:
121+
await cursor.close()
117122

118123
async def execute_many(self, queries: typing.List[ClauseElement]) -> None:
119124
assert self._connection is not None, "Connection is not acquired"

0 commit comments

Comments
 (0)