2016-05-06 12 views
0

Ich versuche Flask zu verwenden, um Daten auf PythonAnywhere zu liefern und den Flask-Restful zu verwenden, aber merke, dass ich ein wenig verwirrt bin.In Flask-Restless stecken bleiben mit Datenbankverbindungen

@app.route("/test") 
def create_api(): 
    engine = create_engine(SQLALCHEMY_DATABASE_URI) 
    Session = sessionmaker(bind=engine) 
    session = Session() 



    try: 
     db = dataset.connect(SQLALCHEMY_DATABASE_URI) 
    except: 
     print "couldn't connect to database" 


    class Prices(db.Model): 
     __tablename__ = 'data' 
     pcode_district = db.Column(db.Integer, primary_key=True) 
     year_95 = db.Column(db.Float) 
     year_15 = db.Column(db.Float) 
     percent_change = db.Column(db.Float) 
    #Create the Flask-Restless API manager 
    manager = flask.ext.restless.APIManager(app, 
            flask_alchemy_db = db) 
    manager.create_api(Prices, methods=['GET'], max_results_per_page =1000) 

Der Fehler ich Bindungen an die Klasse, die das Datenbankmodell definiert:

AttributeError: 'Database' object has no attribute 'Model' 

Ich Instanzen zwischen der Beziehung zwischen der Sitzung und die Datenbank immer verwirrt.

Was mache ich falsch?

+0

Woher kommt die Variable 'Dataset' in Ihrem Code? –

+0

Ich verwendete Dataset-Modul, um eine Verbindung zur Datenbank herzustellen. – elksie5000

+0

Ich kenne das 'Dataset' Modul nicht, aber ist es absichtlich, dass Sie Ihre' Prices' Klasse als eine Unterklasse von etwas definieren, basierend auf der Datenbankverbindung, die Sie zurückbekommen? Wie Glenn in seiner Antwort auf diese Frage sagt, ist das 'db.Model', das Sie als Oberklasse angeben, etwas, das in der 'Dataset'-Verbindung enthalten ist. Wenn Sie beabsichtigen, eine Klasse aus einem anderen 'db'-Modul zu erstellen, sollten Sie einen anderen Variablennamen für die 'dataset'-Verbindung verwenden. –

Antwort

1

Sie haben das Modul db mit Ihrer lokalen db Variablen überschrieben. Benennen Sie die db, die Sie hier zuweisen: db = dataset.connect(SQLALCHEMY_DATABASE_URI) zu etwas anderem.