@@ -240,7 +240,9 @@ def configure_connection(dbapi_connection, connection_record):
240
240
super ().do_connect (engine )
241
241
242
242
@staticmethod
243
- def _sa_load_extensions (dbapi_con , extensions ):
243
+ def _sa_load_extensions (
244
+ dbapi_con , extensions : list [str ], force_install : bool = False
245
+ ) -> None :
244
246
query = """
245
247
WITH exts AS (
246
248
SELECT extension_name AS name, aliases FROM duckdb_extensions()
@@ -253,22 +255,28 @@ def _sa_load_extensions(dbapi_con, extensions):
253
255
# Install and load all other extensions
254
256
todo = set (extensions ).difference (installed )
255
257
for extension in todo :
256
- dbapi_con .install_extension (extension )
258
+ dbapi_con .install_extension (extension , force_install = force_install )
257
259
dbapi_con .load_extension (extension )
258
260
259
- def _load_extensions (self , extensions ):
261
+ def _load_extensions (
262
+ self , extensions : list [str ], force_install : bool = False
263
+ ) -> None :
260
264
with self .begin () as con :
261
- self ._sa_load_extensions (con .connection , extensions )
265
+ self ._sa_load_extensions (
266
+ con .connection , extensions , force_install = force_install
267
+ )
262
268
263
- def load_extension (self , extension : str ) -> None :
269
+ def load_extension (self , extension : str , force_install : bool = False ) -> None :
264
270
"""Install and load a duckdb extension by name or path.
265
271
266
272
Parameters
267
273
----------
268
274
extension
269
275
The extension name or path.
276
+ force_install
277
+ Force reinstallation of the extension.
270
278
"""
271
- self ._load_extensions ([extension ])
279
+ self ._load_extensions ([extension ], force_install = force_install )
272
280
273
281
def create_schema (
274
282
self , name : str , database : str | None = None , force : bool = False
0 commit comments