SQL / ORM
Dès qu'une application web devient un peu complexe, il est nécessaire de passer par une "vraie" base de données (sans enlever aucun mérite à SQLite qui fait parfaitement bien ce pour quoi il a été conçu).
Au niveau des bases de données relationnelles libres (on oublie tout de suite Oracle et SQL Server), il y a principalement deux SGDB :
- PostgreSQL : base de données relationnelle extrêmement puissante et riche en fonctionnalités. Elle est souvent considérée (avis perso partagé par pas mal de monde..) comme la meilleure base de données relationnelle libre. Elle est très bien intégrée avec Python (et donc Bottle).
- MySQL : base de données relationnelle extrêmement populaire, mais qui a perdu de sa superbe depuis le rachat par Oracle. Un "fork" existe, créé par le concepteur original de MySQL: MariaDB. Elle est souvent utilisée pour des applications web, mais elle est moins riche en fonctionnalités que PostgreSQL. Elle est également très bien intégrée avec Python (et donc Bottle).
Dans l'idéal, le code de l'application devrait être indépendant du SGBD utilisé. Vu l'ampleur des différences entre les différents SGDB, il est extrêmement difficile d'écrire "à la main" du code réellement indépendant du SGBD, sauf à utiliser un ORM (Object Relational Mapping) qui va se charger de traduire le code python en code SQL (ou en code de l'ORM). Il existe plusieurs ORM pour Python, mais le plus populaire est SQLAlchemy.
SQLAlchemy sait "parler" plusieurs "dialectes" SQL (PostgreSQL, MySQL, SQLite, Oracle, M$ SQL Server) : https://docs.sqlalchemy.org/en/21/dialects/index.html.
D'autres frameworks web (comme Django) intègrent directement un ORM extrêmement puissant et complet.