diff --git a/ibis/backends/base/__init__.py b/ibis/backends/base/__init__.py index f5419eaea469..3235c2636547 100644 --- a/ibis/backends/base/__init__.py +++ b/ibis/backends/base/__init__.py @@ -1433,9 +1433,14 @@ def _from_url(self, url: str, **kwargs) -> BaseBackend: url = urlparse(url) netloc = url.netloc parts = list(filter(None, (netloc, url.path[bool(netloc) :]))) - database = ( - Path(*parts).absolute() if parts and parts != [":memory:"] else ":memory:" - ) + database = Path(*parts) if parts and parts != [":memory:"] else ":memory:" + if (strdatabase := str(database)).startswith("md:") or strdatabase.startswith( + "motherduck:" + ): + database = strdatabase + elif isinstance(database, Path): + database = database.absolute() + query_params = parse_qs(url.query) for name, value in query_params.items():