[Python] database multipli con flask

Marco C. Soldavini magyar1886 a gmail.com
Lun 27 Maggio 2019 23:02:32 CEST


ciao,
qualcuno di voi ha sviluppato progetti con flask? comunque questa e’ la mia domanda:

Ho impostato in un file config.py la configurazione con db multipli sqlite (e’ una semplice applicazione CRUD):
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///' + os.path.join(basedir, 'master.db')
SQLALCHEMY_BINDS = {
    'project0':        'sqlite:///' + os.path.join(basedir, 'project0.db')
    'project1':        'sqlite:///' + os.path.join(basedir, 'project1.db')
    'project2':        'sqlite:///' + os.path.join(basedir, 'project2.db')

    }
In pratica voglio avere un db master con utenti e progetti, e un login durante il quale l utente sceglie il progetto (project0, project1 ecc.). Questi database di progetto sono identici nella struttura (stesse tabelle).

Ho capito che usando la variable __bind_key__ posso puntare ad uno dei bind definiti in config.py
Mi chiedevo se fosse possibile passare la scelta come variabile alla classe dei modelli contenuti in models.py di flask:
class Project(db.Model,choice):
    __bind_key__ = choice
Finora ho solo appurato che flask-sqlalchemy inizializza un oggetto db partendo dai dati di configurazione che gli ho passato in config.py

app.config.from_object(Config)
db = SQLAlchemy(app)
Non riesco ancora a trovare un modo per definire questa scelta e passarla alla classe di cui sopra. Infatti la classe Project viene inclusa nel file routes.py dove avviene anche di fatto il meccanismo di login.

Forse conviene riorganizzare tutto usando la libreria sqlite3 e scrivendo direttamente le query SQL con il db a cui voglio puntare come parametro. Da routes.py posso accedere a variabili dell utente loggato, invece non ci riesco da models.py, potrebbe essere una soluzione. Fermo restando che con sqlalchemy ottengo una scrittura molto piu’ compatta del codice.

marco
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20190527/198a54df/attachment.html>


Maggiori informazioni sulla lista Python