44from collections .abc import AsyncIterator
55from collections .abc import Generator
66from collections .abc import Iterator
7+ from collections .abc import Sequence
78from typing import Any
89from typing import Union
910
@@ -138,15 +139,15 @@ class Cursor(BufferedCursor):
138139 def __init__ (
139140 self ,
140141 session : ydb .QuerySession ,
142+ tx_mode : ydb .BaseQueryTxMode ,
141143 tx_context : ydb .QueryTxContext | None = None ,
142144 table_path_prefix : str = "" ,
143- autocommit : bool = True ,
144145 ) -> None :
145146 super ().__init__ ()
146147 self ._session = session
148+ self ._tx_mode = tx_mode
147149 self ._tx_context = tx_context
148150 self ._table_path_prefix = table_path_prefix
149- self ._autocommit = autocommit
150151
151152 self ._stream : Iterator | None = None
152153
@@ -166,6 +167,18 @@ def _execute_generic_query(
166167 ) -> Iterator [ydb .convert .ResultSet ]:
167168 return self ._session .execute (query = query , parameters = parameters )
168169
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+
169182 @handle_ydb_errors
170183 def _execute_transactional_query (
171184 self ,
@@ -176,8 +189,21 @@ def _execute_transactional_query(
176189 return tx_context .execute (
177190 query = query ,
178191 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
180204 )
205+ self ._begin_query ()
206+ self ._scroll_stream (replace_current = False )
181207
182208 def execute (
183209 self ,
@@ -191,16 +217,18 @@ def execute(
191217 tx_context = self ._tx_context , query = query , parameters = parameters
192218 )
193219 else :
194- self ._stream = self ._execute_generic_query (
220+ self ._stream = self ._execute_session_query (
195221 query = query , parameters = parameters
196222 )
197223
198224 self ._begin_query ()
199-
200225 self ._scroll_stream (replace_current = False )
201226
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 )
204232
205233 @handle_ydb_errors
206234 def nextset (self , replace_current : bool = True ) -> bool :
@@ -249,15 +277,15 @@ class AsyncCursor(BufferedCursor):
249277 def __init__ (
250278 self ,
251279 session : ydb .aio .QuerySession ,
280+ tx_mode : ydb .BaseQueryTxMode ,
252281 tx_context : ydb .aio .QueryTxContext | None = None ,
253282 table_path_prefix : str = "" ,
254- autocommit : bool = True ,
255283 ) -> None :
256284 super ().__init__ ()
257285 self ._session = session
286+ self ._tx_mode = tx_mode
258287 self ._tx_context = tx_context
259288 self ._table_path_prefix = table_path_prefix
260- self ._autocommit = autocommit
261289
262290 self ._stream : AsyncIterator | None = None
263291
@@ -277,6 +305,18 @@ async def _execute_generic_query(
277305 ) -> AsyncIterator [ydb .convert .ResultSet ]:
278306 return await self ._session .execute (query = query , parameters = parameters )
279307
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+
280320 @handle_ydb_errors
281321 async def _execute_transactional_query (
282322 self ,
@@ -287,8 +327,21 @@ async def _execute_transactional_query(
287327 return await tx_context .execute (
288328 query = query ,
289329 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
291342 )
343+ self ._begin_query ()
344+ await self ._scroll_stream (replace_current = False )
292345
293346 async def execute (
294347 self ,
@@ -302,16 +355,18 @@ async def execute(
302355 tx_context = self ._tx_context , query = query , parameters = parameters
303356 )
304357 else :
305- self ._stream = await self ._execute_generic_query (
358+ self ._stream = await self ._execute_session_query (
306359 query = query , parameters = parameters
307360 )
308361
309362 self ._begin_query ()
310-
311363 await self ._scroll_stream (replace_current = False )
312364
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 )
315370
316371 @handle_ydb_errors
317372 async def nextset (self , replace_current : bool = True ) -> bool :
0 commit comments