]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Allow Iterable type for cursor.executemany() parameters
authorDenis Laxalde <denis.laxalde@dalibo.com>
Tue, 2 Nov 2021 14:12:43 +0000 (15:12 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 3 Nov 2021 15:56:06 +0000 (16:56 +0100)
An iterable is enough since we only iterate over the parameters value
using a for loop (in _executemany_gen()).

There's an usage with a generator expression in
tests/scripts/dectest.py. (Spotted by running mypy.)

psycopg/psycopg/cursor.py
psycopg/psycopg/cursor_async.py
psycopg/psycopg/server_cursor.py

index 7b3d79ce5d7c11425af858e361088f0c69c08790..b13efd0520568ffcd93c2d7d8d06d54c33b4d272 100644 (file)
@@ -6,7 +6,7 @@ psycopg cursor objects
 
 import sys
 from types import TracebackType
-from typing import Any, Callable, Generic, Iterator, List
+from typing import Any, Callable, Generic, Iterable, Iterator, List
 from typing import Optional, NoReturn, Sequence, Type, TypeVar, TYPE_CHECKING
 from contextlib import contextmanager
 
@@ -208,7 +208,7 @@ class BaseCursor(Generic[ConnectionType, Row]):
         self._last_query = query
 
     def _executemany_gen(
-        self, query: Query, params_seq: Sequence[Params]
+        self, query: Query, params_seq: Iterable[Params]
     ) -> PQGen[None]:
         """Generator implementing `Cursor.executemany()`."""
         yield from self._start_query(query)
@@ -564,7 +564,7 @@ class Cursor(BaseCursor["Connection[Any]", Row]):
             raise ex.with_traceback(None)
         return self
 
-    def executemany(self, query: Query, params_seq: Sequence[Params]) -> None:
+    def executemany(self, query: Query, params_seq: Iterable[Params]) -> None:
         """
         Execute the same command with a sequence of input data.
         """
index db573c0c7841447000f9869acc9c4bb82bee0a24..f9d7109db0baae9cedf6721ceff3340124f85772 100644 (file)
@@ -5,8 +5,8 @@ psycopg async cursor objects
 # Copyright (C) 2020-2021 The Psycopg Team
 
 from types import TracebackType
-from typing import Any, AsyncIterator, List
-from typing import Optional, Sequence, Type, TypeVar, TYPE_CHECKING
+from typing import Any, AsyncIterator, Iterable, List
+from typing import Optional, Type, TypeVar, TYPE_CHECKING
 
 from . import errors as e
 
@@ -82,7 +82,7 @@ class AsyncCursor(BaseCursor["AsyncConnection[Any]", Row]):
         return self
 
     async def executemany(
-        self, query: Query, params_seq: Sequence[Params]
+        self, query: Query, params_seq: Iterable[Params]
     ) -> None:
         async with self._conn.lock:
             await self._conn.wait(self._executemany_gen(query, params_seq))
index f89f470fb11d72b6a101de336444c62c171f24ed..6e6653df548f5ae5eecc99d3fe9f0cb8ee5f14cd 100644 (file)
@@ -5,8 +5,8 @@ psycopg server-side cursor objects.
 # Copyright (C) 2020-2021 The Psycopg Team
 
 import warnings
-from typing import Any, AsyncIterator, Generic, List, Iterator, Optional
-from typing import Sequence, TypeVar, TYPE_CHECKING
+from typing import Any, AsyncIterator, Generic, List, Iterable, Iterator
+from typing import Optional, TypeVar, TYPE_CHECKING
 
 from . import pq
 from . import sql
@@ -267,7 +267,7 @@ class ServerCursor(Cursor[Row]):
 
         return self
 
-    def executemany(self, query: Query, params_seq: Sequence[Params]) -> None:
+    def executemany(self, query: Query, params_seq: Iterable[Params]) -> None:
         """Method not implemented for server-side cursors."""
         raise e.NotSupportedError(
             "executemany not supported on server-side cursors"
@@ -387,7 +387,7 @@ class AsyncServerCursor(AsyncCursor[Row]):
         return self
 
     async def executemany(
-        self, query: Query, params_seq: Sequence[Params]
+        self, query: Query, params_seq: Iterable[Params]
     ) -> None:
         raise e.NotSupportedError(
             "executemany not supported on server-side cursors"