Skip to content

Commit 3868ea5

Browse files
committed
CRF #219, also added status().
1 parent 615a917 commit 3868ea5

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

gino/dialects/asyncpg.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,12 @@ async def _execute(self, params, one):
115115
if one:
116116
rv = await self._prepared.fetchrow(*params)
117117
if rv is None:
118-
return []
118+
rv = []
119119
else:
120-
return [rv]
120+
rv = [rv]
121121
else:
122-
return await self._prepared.fetch(*params)
122+
rv = await self._prepared.fetch(*params)
123+
return self._prepared.get_statusmsg(), rv
123124

124125

125126
class DBAPICursor(base.DBAPICursor):

gino/dialects/base.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,20 @@ def iterate(self, *params, **kwargs):
7575
return _PreparedIterableCursor(self, params, kwargs)
7676

7777
async def _do_execute(self, multiparams, params, one=False,
78-
return_model=True):
78+
return_model=True, status=False):
7979
ctx = self.context.connection.execute(
8080
self.clause, *multiparams, **params).context
8181
if ctx.executemany:
8282
raise ValueError('PreparedStatement does not support multiple '
8383
'parameters.')
84-
assert ctx.statement == self.context.statement, 'Please report a bug'
84+
assert ctx.statement == self.context.statement, (
85+
'Prepared statement generated different SQL with parameters')
8586
params = []
8687
for val in ctx.parameters[0]:
87-
if asyncio.iscoroutine(val):
88-
val = await val
8988
params.append(val)
90-
rows = await self._execute(params, one)
89+
msg, rows = await self._execute(params, one)
90+
if status:
91+
return msg
9192
item = self.context.process_rows(rows, return_model=return_model)
9293
if one:
9394
if item:
@@ -110,6 +111,9 @@ async def scalar(self, *multiparams, **params):
110111
else:
111112
return None
112113

114+
async def status(self, *multiparams, **params):
115+
return await self._do_execute(multiparams, params, status=True)
116+
113117
def _get_iterator(self, *params, **kwargs):
114118
raise NotImplementedError
115119

tests/test_prepared_stmt.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ async def test_compiled_and_bindparam(bind):
2828
with pytest.raises(ValueError, match='does not support multiple'):
2929
await get.all([dict(uid=1), dict(uid=2)])
3030

31+
delete = await conn.prepare(
32+
User.delete.where(User.nickname == db.bindparam('name')))
33+
for name in '12345':
34+
msg = await delete.status(name=name)
35+
assert msg == 'DELETE 1'
36+
3137

3238
async def test_statement(engine):
3339
async with engine.acquire() as conn:

0 commit comments

Comments
 (0)