2015-10-24 3 views
6

Ich möchte eine Verbindung zu einer bereits bestehenden Postgres-Datenbank herstellen, der in meiner App keine Modelle zugeordnet sind. Es ist nicht überraschend, dass sich dies als lästig erweist und dass dies mein erster Versuch mit Python und Flask ist.Verwenden von Flask, Python und Postgresql Wie kann ich eine Verbindung zu einer bereits vorhandenen Datenbank herstellen?

Die app/py-Code ist:

import os 
from flask import Flask 
from flask import render_template 
from flask.ext.sqlalchemy import SQLAlchemy 
from sqlalchemy import create_engine, Column, Integer, String 
from sqlalchemy.ext.declarative import declarative_base 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://blah:[email protected]:5432/mydb' 
db = SQLAlchemy(app) 
db.create_all() 
db.session.commit() 

@app.route("/") 
def main(): 
    return render_template('index.html') 


@app.route('/base') 
def base(): 
    myusers = users.all() 
    return render_template('base.html') 

if __name__ == '__main__': 
    app.run(debug=True) 

die def main() funktioniert so, dass viel ich erreicht habe.

In der Ansicht (base.html) haben wir:

{% for user in myusers %} 
    <div><p>{{ user.first_name }} </b></p></div> 
    {% endfor %} 

Als ich zum base.html Seite gehen die anhaltende Fehler NameError: global name 'users' is not defined

Was ist, viele Dinge wahrscheinlich, bin ich tun falsch hier? Alle Hilfe wird geschätzt. Vielen Dank.

Antwort

8

Sie müssen Ihre vorhandene Datenbank rückentwickeln, um die Python-Modelle zu generieren, die SQLAlchemy verwenden kann.

sqlacodegen kann es für Sie tun, installieren Sie es pip mit - pip install sqlacodegen

an der Eingabeaufforderung Sie Ihre Modelle mit der folgenden erzeugen:

sqlacodegen --outfile c:/temp/models.py postgres://blah:[email protected]:5432/mydb 

Kopieren Sie die generierte models.py Datei in Ihre Projektordner und vergessen Sie nicht, die von Ihnen benötigten Modellklassen zu importieren, z Ihre Benutzerklasse.

Überprüfen Sie die Datei models.py, um zu sehen, wie die Tabellen in Klassen konvertiert wurden, und insbesondere die Umhüllung der generierten Klassennamen - z. B. "Benutzer" oder "Benutzer".

Sie müssen die „myusers“ Variable zu Ihrer Vorlage zu übergeben, die erzeugte Benutzerklasse in models.py angenommen wird „User“ genannt:

@app.route('/base') 
def base(): 
    myusers = db.session.query(User).all() 
    return render_template('base.html', myusers=myusers) 

Vergessen Sie nicht, das Benutzermodell auf die zu importierende Anfang der app.py-Datei (Sie den Namen der Benutzerklasse überprüfen müssen, die von sqlacodgen generiert wurde):

from models import User 
+0

dank ich ihm gebe einen Schuss und dann python models.py laufen? – user1903663

+0

danke, dass es eine schöne Datei produziert, wie Sie vorgeschlagen haben. Was mache ich jetzt? Entschuldigung, so ein Dummy zu sein. Also importiere ich in meine App-Datei oder mache Python-Run-Modelle, py? Oder etwas anderes ...? – user1903663

+0

Siehe aktualisierte Antwort. – pjcunningham

Verwandte Themen