html_url,issue_url,id,node_id,user,user_label,created_at,updated_at,author_association,body,reactions,issue,issue_label,performed_via_github_app https://github.com/simonw/sqlite-utils/issues/432#issuecomment-1155764428,https://api.github.com/repos/simonw/sqlite-utils/issues/432,1155764428,IC_kwDOCGYnMM5E45DM,9599,simonw,2022-06-14T22:16:21Z,2022-06-14T22:16:21Z,OWNER,"Initial idea of how the `.table()` method would change: ```diff diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 7a06304..3ecb40b 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -474,11 +474,12 @@ class Database: self._tracer(sql, None) return self.conn.executescript(sql) - def table(self, table_name: str, **kwargs) -> Union[""Table"", ""View""]: + def table(self, table_name: str, alias: Optional[str] = None, **kwargs) -> Union[""Table"", ""View""]: """""" Return a table object, optionally configured with default options. :param table_name: Name of the table + :param alias: The database alias to use, if referring to a table in another connected database """""" klass = View if table_name in self.view_names() else Table return klass(self, table_name, **kwargs) ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",1236693079,"Support `rows_where()`, `delete_where()` etc for attached alias databases", https://github.com/simonw/sqlite-utils/issues/432#issuecomment-1155764064,https://api.github.com/repos/simonw/sqlite-utils/issues/432,1155764064,IC_kwDOCGYnMM5E449g,9599,simonw,2022-06-14T22:15:44Z,2022-06-14T22:15:44Z,OWNER,"Implementing this would be a pretty big change - initial instinct is that I'd need to introduce a `self.alias` property to `Queryable` (the subclass of `Table` and `View`) and a new `self.name_with_alias` getter which returns `alias.tablename` if `alias` is set to a not-None value. Then I'd need to rewrite every piece of code like this: https://github.com/simonw/sqlite-utils/blob/1b09538bc6c1fda773590f3e600993ef06591041/sqlite_utils/db.py#L1161 To look like this instead: ```python sql = ""select {} from [{}]"".format(select, self.name_with_alias) ``` But some parts would be harder - for example: https://github.com/simonw/sqlite-utils/blob/1b09538bc6c1fda773590f3e600993ef06591041/sqlite_utils/db.py#L1227-L1231 Would have to know to query `alias.sqlite_master` instead. The cached table counts logic like this would need a bunch of changes too: https://github.com/simonw/sqlite-utils/blob/1b09538bc6c1fda773590f3e600993ef06591041/sqlite_utils/db.py#L644-L657","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",1236693079,"Support `rows_where()`, `delete_where()` etc for attached alias databases", https://github.com/simonw/sqlite-utils/issues/432#issuecomment-1155759857,https://api.github.com/repos/simonw/sqlite-utils/issues/432,1155759857,IC_kwDOCGYnMM5E437x,9599,simonw,2022-06-14T22:09:07Z,2022-06-14T22:09:07Z,OWNER,"Third option, and I think the one I like the best: ```python rows = db.table(""tablename"", alias=""otherdb"").rows_where(alias=""otherdb"") ``` The `db.table(tablename)` method already exists as an alternative to `db[tablename]`: https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-table-configuration ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",1236693079,"Support `rows_where()`, `delete_where()` etc for attached alias databases", https://github.com/simonw/sqlite-utils/issues/432#issuecomment-1155758664,https://api.github.com/repos/simonw/sqlite-utils/issues/432,1155758664,IC_kwDOCGYnMM5E43pI,9599,simonw,2022-06-14T22:07:50Z,2022-06-14T22:07:50Z,OWNER,"Another potential fix: add a `alias=` parameter to `rows_where()` and other similar methods. Then you could do this: ```python rows = db[""tablename""].rows_where(alias=""otherdb"") ``` This feels wrong to me: `db[""tablename""]` is the bit that is supposed to return a table object. Having part of what that table object is exist as a parameter to other methods is confusing. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",1236693079,"Support `rows_where()`, `delete_where()` etc for attached alias databases", https://github.com/simonw/sqlite-utils/issues/432#issuecomment-1155756742,https://api.github.com/repos/simonw/sqlite-utils/issues/432,1155756742,IC_kwDOCGYnMM5E43LG,9599,simonw,2022-06-14T22:05:38Z,2022-06-14T22:05:49Z,OWNER,"I don't like the idea of `table_names()` returning names of tables from connected databases as well, because it feels like it could lead to surprising behaviour - especially if those connected databases turn to have table names that are duplicated in the main connected database. It would be neat if functions like `.rows_where()` worked though. One thought would be to support something like this: ```python rows = db[""otherdb.tablename""].rows_where() ``` But... `.` is a valid character in a SQLite table name. So `""otherdb.tablename""` might ambiguously refer to a table called `tablename` in a connected database with the alias `otherdb`, OR a table in the current database with the name `otherdb.tablename`.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",1236693079,"Support `rows_where()`, `delete_where()` etc for attached alias databases",