Docs are bad:

- JSON field, specifically JSONB https://github.com/tiangolo/sqlmodel/discussions/696 and https://github.com/fastapi/sqlmodel/discussions/1105
- One-to-many relationships
- Data validation https://github.com/tiangolo/sqlmodel/issues/52
- Aggregate functions, like count
- Select on joined data
- One-to-one and one-to-many at the same time

TODO

- [ ] snake case for attributes https://github.com/sqlalchemy/sqlalchemy/issues/7149
- [ ] foreign key names https://github.com/fastapi/sqlmodel/discussions/1213


find_or_create

```
    @staticmethod
    def find_or_create_from_scrape(scrape: "Scrape", normalized_scrape_data: StoreScrape):
        if menu := Menu.get(
            digital_channel=normalized_scrape_data.digital_channel, channel_id=normalized_scrape_data.channel_id
        ):
            return menu

        assert scrape.id
        assert normalized_scrape_data.normalized_url
        assert normalized_scrape_data.channel_id

        menu = Menu(
            originating_scrape_id=scrape.id,
            name=normalized_scrape_data.name,
            channel_id=normalized_scrape_data.channel_id,
            url=normalized_scrape_data.normalized_url,
        ).save()

        return menu

```

clear engine

```
# def clear_engine():
#     global _engine, _connection

#     if _engine:
#         _engine.dispose()
#         _engine = None
#         _connection = None
```
