2015-10-24 3 views
6

मैं एक पूर्व-मौजूदा पोस्टग्रेज़ डेटाबेस से कनेक्ट करना चाहता हूं जिसमें मेरे ऐप में कोई मॉडल संबद्ध नहीं है। अनजाने में, यह परेशानी साबित कर रहा है जिसमें यह पाइथन और फ्लास्क के साथ मेरा पहला प्रयास है।फ्लास्क, पायथन और पोस्टग्रेस्क्ल का उपयोग कर मैं पूर्व-मौजूदा डेटाबेस से कैसे कनेक्ट कर सकता हूं?

एप्लिकेशन/py कोड है:

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]naws.com: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) 

डीईएफ़ मुख्य() इतना है कि ज्यादा मैं प्राप्त कर ली है काम करता है।

दृश्य (base.html) में हमने:

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

जब मैं base.html पृष्ठ पर जाने के लगातार त्रुटि NameError: global name 'users' is not defined

क्या है, शायद बहुत सी बातें की है, मैं क्या कर यहाँ गलत है? सभी मदद की सराहना की। धन्यवाद।

उत्तर

8

आपको स्क्लेक्लेमी का उपयोग कर पाइथन मॉडल जेनरेट करने के लिए अपने मौजूदा डेटाबेस को इंजीनियर करने की आवश्यकता है।

sqlacodegen, यह तुम्हारे लिए क्या कर सकते हैं पिप का उपयोग कर इसे स्थापित - pip install sqlacodegen

कमांड प्रॉम्प्ट से आप निम्नलिखित के साथ अपने मॉडल उत्पन्न कर सकते हैं:

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

कॉपी उत्पन्न models.py फ़ाइल में अपने प्रोजेक्ट फ़ोल्डर और आपको आवश्यक मॉडल कक्षाओं को आयात करना न भूलें, उदाहरण के लिए आपकी उपयोगकर्ता कक्षा

यह देखने के लिए models.py फ़ाइल को जांचें कि टेबल को कक्षाओं में कैसे परिवर्तित किया गया था और विशेष रूप से जेनरेट किए गए वर्ग नामों का आवरण - जैसे "उपयोगकर्ता" या "उपयोगकर्ता"।

आप अपने टेम्पलेट के लिए "myusers" चर पारित करने के लिए यह सोचते हैं models.py में उत्पन्न उपयोगकर्ता वर्ग कहा जाता है "उपयोगकर्ता" की जरूरत है:

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

पर उपयोगकर्ता मॉडल आयात करने के लिए मत भूलना

from models import User 
+0

धन्यवाद मैं इसे एक शॉट दे देंगे और उसके बाद अजगर models.py चलाएँ: app.py फ़ाइल (आप उपयोगकर्ता वर्ग कि sqlacodgen द्वारा उत्पन्न की गई के नाम जांच करने की आवश्यकता) के शीर्ष? – user1903663

+0

धन्यवाद जैसा कि आपने सुझाव दिया है, यह एक सुंदर फ़ाइल का उत्पादन करता है। अब मैं क्या करू? इस तरह के एक डमी होने के लिए खेद है। तो मैं अपनी ऐप फ़ाइल में आयात करता हूं या पाइथन रन मॉडल करता हूं, पाई? या कुछ और ...? – user1903663

+0

अद्यतन उत्तर देखें। – pjcunningham

संबंधित मुद्दे

 संबंधित मुद्दे