<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">ciao,<div class="">qualcuno di voi ha sviluppato progetti con flask? comunque questa e’ la mia domanda:</div><div class=""><br class=""></div><div class="">Ho impostato in un file config.py la configurazione con db multipli sqlite (e’ una semplice applicazione CRUD):</div><div class=""><div class="post-text" itemprop="text">
<pre class="default prettyprinted prettyprint"><code class=""><span class="pln">SQLALCHEMY_DATABASE_URI </span><span class="pun">=</span><span class="pln"> os</span><span class="pun">.</span><span class="pln">environ</span><span class="pun">.</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'DATABASE_URL'</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">or</span><span class="pln"> </span><span class="str">'<a href="sqlite:///" class="">sqlite:///</a>'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> os</span><span class="pun">.</span><span class="pln">path</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">basedir</span><span class="pun">,</span><span class="pln"> </span><span class="str">'master.db'</span><span class="pun">)</span><span class="pln">
SQLALCHEMY_BINDS </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="str">'project0'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'<a href="sqlite:///" class="">sqlite:///</a>'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> os</span><span class="pun">.</span><span class="pln">path</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">basedir</span><span class="pun">,</span><span class="pln"> </span><span class="str">'project0.db'</span><span class="pun">)</span><span class="pln">
</span><span class="str">'project1'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'<a href="sqlite:///" class="">sqlite:///</a>'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> os</span><span class="pun">.</span><span class="pln">path</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">basedir</span><span class="pun">,</span><span class="pln"> </span><span class="str">'project1.db'</span><span class="pun">)</span><span class="pln">
</span><span class="str">'project2'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'<a href="sqlite:///" class="">sqlite:///</a>'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> os</span><span class="pun">.</span><span class="pln">path</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">basedir</span><span class="pun">,</span><span class="pln"> </span><span class="str">'project2.db'</span><span class="pun">)</span><span class="pln">
</span><span class="pun">}</span></code></pre><p class="">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).</p><div class="">Ho capito che usando la variable __bind_key__ posso puntare ad uno dei bind definiti in config.py</div><div class="">Mi chiedevo se fosse possibile passare la scelta come variabile alla classe dei modelli contenuti in models.py di flask:</div>
<pre class="default prettyprinted prettyprint"><code class=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Project</span><span class="pun">(</span><span class="pln">db</span><span class="pun">.</span><span class="typ">Model</span><span class="pun">,</span><span class="pln">choice</span><span class="pun">):</span><span class="pln">
__bind_key__ </span><span class="pun">=</span><span class="pln"> choice</span></code></pre><p class="">Finora ho solo appurato che flask-sqlalchemy inizializza un oggetto db partendo dai dati di configurazione che gli ho passato in config.py</p>
<pre class="default prettyprinted prettyprint"><code class=""><span class="pln">app</span><span class="pun">.</span><span class="pln">config</span><span class="pun">.</span><span class="pln">from_object</span><span class="pun">(</span><span class="typ">Config</span><span class="pun">)</span><span class="pln">
db </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SQLAlchemy</span><span class="pun">(</span><span class="pln">app</span><span class="pun">)</span></code></pre><p class="">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.</p><div class="">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.</div><div class=""><br class=""></div><div class="">marco</div></div></div></body></html>