Seite 1 von 1
Flask: Datenbank definition in einer anderen Datei
Verfasst: Donnerstag 30. Mai 2013, 18:33
von friedduck
Hallo,
habe gestern bis in die Pupen probiert, aber ich bekomme es nicht hin meine Datenbank definitionen in eine
andere Datei auszulagern. Ich weiß nicht was ich Importieren soll.
Hat jemand nen Tipp?
Beispiel (nur ein kurzer ausschnitt):
main.py
Code: Alles auswählen
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
db.py
Code: Alles auswählen
from main import db
class Datenbank(db.Model):
wert1 = db.Column...
u.s.w
db.create.all()
Die Datenbank wird nicht ertstellt und wenn ich die händisch anlege, kann ich aus der main.py keine querys absetzen...
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Donnerstag 30. Mai 2013, 22:05
von friedduck
Zu schwer?
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Donnerstag 30. Mai 2013, 22:28
von BlackJack
@friedduck: Zu wenig Information‽ Versuchst Du da vielleicht einen zirkulären Import? Das ist eine ganz schlechte Idee.
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Donnerstag 30. Mai 2013, 22:34
von friedduck
Versuchst Du da vielleicht einen zirkulären Import? Das ist eine ganz schlechte Idee.
Sowas versuche ich ja grade zu vermeiden.
Was brauchst du an Info?
Ich will doch einfach nur mein Datenbank modell in eine andere Datei ausgliedern, wegen der Übersicht.
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Donnerstag 30. Mai 2013, 22:55
von DasIch
Statt die SQLAlchemy Instanz in main.py zu erzeugen, erzeuge sie in db.py und in main.py importierst du dann einfach die SQLAlchemy Instanz und rufst `.init_app()` mit der `app` auf anstatt `SQLAlchemy()` mit der `app` aufzurufen.
Das erlaubt dir dann auch die Datenbank in unterschiedlichen Flask Anwendungen zu nutzen.
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Freitag 31. Mai 2013, 13:53
von friedduck
@DasIch: Hi, ich bin mir sicher das deine Lösung funktioniert aber ich habe es gestern, bevor ich deinen Post gelesen hab,
über __init__.py hinbekommen. Kann es da irgendwelche "nebenwirkungen" geben?
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Freitag 31. Mai 2013, 15:50
von DasIch
Die Anwendung sollte in etwa so aussehen
https://gist.github.com/DasIch/5685500. Ich hab dabei angenommen das db.py und app.py in einem package sind.
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Freitag 31. Mai 2013, 18:36
von friedduck
Hi meine jetzige Lösung sieht so aus:
__init__.py:
Code: Alles auswählen
# -*- coding: utf-8 -*-
from flask import Flask, redirect, url_for, flash, abort, request, session
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('server_config')
db = SQLAlchemy(app)
#from src import main
from src import server_db
from src import server_views
server_db.py:
Code: Alles auswählen
# -*- coding: utf-8 -*-
from src import db
#===============================================================================
# Tabellen definieren
#===============================================================================
class BLA(db.Model):
id = db.Column(db.Integer, primary_key = True)
funktioniert auch gut.
Die Anregung ist von diesem Tut:
http://blog.miguelgrinberg.com/post/the ... ello-world
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Freitag 31. Mai 2013, 19:14
von BlackJack
@friedduck: `src` ist ein schlechter Name für ein Package. Das sieht nach einer fehlgeleiteten Verwendung des üblichen Namensschemas bei Projektverzeichnisstrukturen aus. In dem Verzeichnis ``src/`` liegt oft der Quelltext, das Verzeichnis selbst ist aber nicht dazu da um zum Package gemacht zu werden. Packages liegen *in* dem Verzeichnis und haben *sinnvolle* Namen.
Wie befürchtet hast Du es jetzt mit einem zirkulären Import gemacht. Das ist undurchsichtig, fehleranfällig, und unnötig kompliziert. Wenn sich zwei Module gegenseitig benötigen sind sie entweder so eng gekoppelt, dass es keinen Sinn macht sie aufzuteilen, oder die Aufteilung ist falsch vorgenommen worden.
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Freitag 31. Mai 2013, 19:27
von friedduck
Danke für die Auskunft BlackJack, mit src haste recht, werde mich bessern
Wie befürchtet hast Du es jetzt mit einem zirkulären Import gemacht.
War nicht meine Absicht, ich will schlechten Design vermeiden, deswegen frage ich ja fast wegen jeden pups nach.
Bin ja noch dabei Python zu verinnerlichen...
Ist das das Beispiel von Dasich ok, oder hast du da noch eine Verbesserung?
Und apropos Python verinnerlichen, willst du nicht mal ein Tutorial zu OOP schreiben, ich wette du wirst es gut erklären können,
so das auch die Einsteiger (wie ich) gut damit zurecht kommen werden.
Das ist mein nächstes Angriffsziel...
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Freitag 31. Mai 2013, 21:28
von friedduck
@DasIch:
habe meine Beispiele nach deiner Metode umgestrickt, beim aufruf von db.create_all() bekomme ich die
Fehlermeldung:
Code: Alles auswählen
raise RuntimeError('application not registered on db '
RuntimeError: application not registered on db instance and no application bound to current contex
Einde Idee?
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Samstag 1. Juni 2013, 09:57
von friedduck
Habe den Quellcode folgend ergänzt:
db.app = app
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Samstag 1. Juni 2013, 19:31
von friedduck
Hmm es läuft jetzt, aber warum? Es scheint fast so als ob Flask nicht weiß welche app instanz er db zuweisen soll.
Ist so still hier, benutzt denn keiner Flask?
Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Samstag 1. Juni 2013, 20:04
von DasIch
Es kann mehrere App Instanzen geben deswegen kann man da keine magischen Zuweisungen geben, deswegen haben Extensions üblicherweise eine .init_app() Methode oder nutzen den app context.
Keine Ahnung wie viele hier Flask nutzen aber du wirst wesentlich mehr Nutzer und Flask Entwickler auf der Flask Mailingliste oder im #pocoo IRC Channel finden, da ist es auch nicht ganz so still

Re: Flask: Datenbank definition in einer anderen Datei
Verfasst: Samstag 1. Juni 2013, 20:13
von friedduck
DasIch hat geschrieben:Keine Ahnung wie viele hier Flask nutzen aber du wirst wesentlich mehr Nutzer und Flask Entwickler auf der Flask Mailingliste oder im #pocoo IRC Channel finden, da ist es auch nicht ganz so still

Stimmt
Es kann mehrere App Instanzen geben deswegen kann man da keine magischen Zuweisungen geben, deswegen haben Extensions üblicherweise eine .init_app() Methode oder nutzen den app context.
Ok, funktioniert dein Bespiel denn bei Dir? Ich habs ja genauso gemacht wie du, deswegen wundert es mich. Bin grade bei Flask (Homepage) am lesen, Armin
emfiehlt ja die Blueprints zu benutzen.