4
4
from collections .abc import AsyncIterator
5
5
from collections .abc import Generator
6
6
from collections .abc import Iterator
7
+ from collections .abc import Sequence
7
8
from typing import Any
8
9
from typing import Union
9
10
@@ -138,15 +139,15 @@ class Cursor(BufferedCursor):
138
139
def __init__ (
139
140
self ,
140
141
session : ydb .QuerySession ,
142
+ tx_mode : ydb .BaseQueryTxMode ,
141
143
tx_context : ydb .QueryTxContext | None = None ,
142
144
table_path_prefix : str = "" ,
143
- autocommit : bool = True ,
144
145
) -> None :
145
146
super ().__init__ ()
146
147
self ._session = session
148
+ self ._tx_mode = tx_mode
147
149
self ._tx_context = tx_context
148
150
self ._table_path_prefix = table_path_prefix
149
- self ._autocommit = autocommit
150
151
151
152
self ._stream : Iterator | None = None
152
153
@@ -166,6 +167,18 @@ def _execute_generic_query(
166
167
) -> Iterator [ydb .convert .ResultSet ]:
167
168
return self ._session .execute (query = query , parameters = parameters )
168
169
170
+ @handle_ydb_errors
171
+ def _execute_session_query (
172
+ self ,
173
+ query : str ,
174
+ parameters : ParametersType | None = None ,
175
+ ) -> Iterator [ydb .convert .ResultSet ]:
176
+ return self ._session .transaction (self ._tx_mode ).execute (
177
+ query = query ,
178
+ parameters = parameters ,
179
+ commit_tx = True ,
180
+ )
181
+
169
182
@handle_ydb_errors
170
183
def _execute_transactional_query (
171
184
self ,
@@ -176,8 +189,21 @@ def _execute_transactional_query(
176
189
return tx_context .execute (
177
190
query = query ,
178
191
parameters = parameters ,
179
- commit_tx = self ._autocommit ,
192
+ commit_tx = False ,
193
+ )
194
+
195
+ def execute_scheme (
196
+ self ,
197
+ query : str ,
198
+ parameters : ParametersType | None = None ,
199
+ ) -> None :
200
+ self ._raise_if_closed ()
201
+
202
+ self ._stream = self ._execute_generic_query (
203
+ query = query , parameters = parameters
180
204
)
205
+ self ._begin_query ()
206
+ self ._scroll_stream (replace_current = False )
181
207
182
208
def execute (
183
209
self ,
@@ -191,16 +217,18 @@ def execute(
191
217
tx_context = self ._tx_context , query = query , parameters = parameters
192
218
)
193
219
else :
194
- self ._stream = self ._execute_generic_query (
220
+ self ._stream = self ._execute_session_query (
195
221
query = query , parameters = parameters
196
222
)
197
223
198
224
self ._begin_query ()
199
-
200
225
self ._scroll_stream (replace_current = False )
201
226
202
- async def executemany (self ) -> None :
203
- pass
227
+ def executemany (
228
+ self , query : str , seq_of_parameters : Sequence [ParametersType ]
229
+ ) -> None :
230
+ for parameters in seq_of_parameters :
231
+ self .execute (query , parameters )
204
232
205
233
@handle_ydb_errors
206
234
def nextset (self , replace_current : bool = True ) -> bool :
@@ -249,15 +277,15 @@ class AsyncCursor(BufferedCursor):
249
277
def __init__ (
250
278
self ,
251
279
session : ydb .aio .QuerySession ,
280
+ tx_mode : ydb .BaseQueryTxMode ,
252
281
tx_context : ydb .aio .QueryTxContext | None = None ,
253
282
table_path_prefix : str = "" ,
254
- autocommit : bool = True ,
255
283
) -> None :
256
284
super ().__init__ ()
257
285
self ._session = session
286
+ self ._tx_mode = tx_mode
258
287
self ._tx_context = tx_context
259
288
self ._table_path_prefix = table_path_prefix
260
- self ._autocommit = autocommit
261
289
262
290
self ._stream : AsyncIterator | None = None
263
291
@@ -277,6 +305,18 @@ async def _execute_generic_query(
277
305
) -> AsyncIterator [ydb .convert .ResultSet ]:
278
306
return await self ._session .execute (query = query , parameters = parameters )
279
307
308
+ @handle_ydb_errors
309
+ async def _execute_session_query (
310
+ self ,
311
+ query : str ,
312
+ parameters : ParametersType | None = None ,
313
+ ) -> AsyncIterator [ydb .convert .ResultSet ]:
314
+ return await self ._session .transaction (self ._tx_mode ).execute (
315
+ query = query ,
316
+ parameters = parameters ,
317
+ commit_tx = True ,
318
+ )
319
+
280
320
@handle_ydb_errors
281
321
async def _execute_transactional_query (
282
322
self ,
@@ -287,8 +327,21 @@ async def _execute_transactional_query(
287
327
return await tx_context .execute (
288
328
query = query ,
289
329
parameters = parameters ,
290
- commit_tx = self ._autocommit ,
330
+ commit_tx = False ,
331
+ )
332
+
333
+ async def execute_scheme (
334
+ self ,
335
+ query : str ,
336
+ parameters : ParametersType | None = None ,
337
+ ) -> None :
338
+ self ._raise_if_closed ()
339
+
340
+ self ._stream = await self ._execute_generic_query (
341
+ query = query , parameters = parameters
291
342
)
343
+ self ._begin_query ()
344
+ await self ._scroll_stream (replace_current = False )
292
345
293
346
async def execute (
294
347
self ,
@@ -302,16 +355,18 @@ async def execute(
302
355
tx_context = self ._tx_context , query = query , parameters = parameters
303
356
)
304
357
else :
305
- self ._stream = await self ._execute_generic_query (
358
+ self ._stream = await self ._execute_session_query (
306
359
query = query , parameters = parameters
307
360
)
308
361
309
362
self ._begin_query ()
310
-
311
363
await self ._scroll_stream (replace_current = False )
312
364
313
- async def executemany (self ) -> None :
314
- pass
365
+ async def executemany (
366
+ self , query : str , seq_of_parameters : Sequence [ParametersType ]
367
+ ) -> None :
368
+ for parameters in seq_of_parameters :
369
+ await self .execute (query , parameters )
315
370
316
371
@handle_ydb_errors
317
372
async def nextset (self , replace_current : bool = True ) -> bool :
0 commit comments