Ich weiß ehrlich gesagt nicht, ob die Frage nicht vielleicht in Datenbanken oder Webframeworks, aber ich vermute, es ist ein Problem mit Python Grundlagen. Folgendes Problem: ich habe eine Flask Anwendung, in der ich eine Datenbank anspreche. Die Verzeichnisstruktur sieht in etwa so aus
Code: Alles auswählen
/myapp/
/myapp/runserver.py
/myapp/config.py
/myapp/app/
/myapp/app/__init__.py
/myapp/app/views/
/myapp/app/templates/
/myapp/app/static/
/myapp/app/model/
/myapp/app/model/__init__.py
/myapp/app/model/model1.py
/myapp/app/model/model2.py
Ich habe also kein Modul sondern ein Paket für die Model. In der model/__init__.py importiere ich die ganzen Model, ich erstelle die Datenbankverbindung mit
metadata.bind und rufe
setup_all() auf (Elixir). Das ganze sieht in etwa so aus.
Code: Alles auswählen
from elixir import metadata, setup_all, session
from model1 import Model1
from model2 import Model2
metadata.bind = "postgresql://user:pw@localhost/database"
session.configure(bind=metadata.bind)
metadata.bind.echo = True
setup_all()
Soweit funktioniert das ganze, ich weiß nur nicht, ob das guter Stil ist. Gibt es einen pythonischeren Weg?
Und meine zweite Frage: ich habe den String für die Datenbank momentan direkt in der __init__.py in /myall/app/model/ geschrieben. Jetzt würde ich aber gerne den Verbindungsstring in die config.py auslagern und app.config von Flask nutzen.
Code: Alles auswählen
app = Flask(__name__)
app.config.from_envvar('SETTINGS')
Die Envvar habe ich im System gesetzt und das Laden funktioniert soweit. Ich erstelle das app Objekt aber in /myapp/app/__init__.py. Wie bekomme ich das Objekt jetzt in das Model? Die Datenbankverbindung wird ja automatisch ausgeführt, sobald ich ein Model importiere.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol: