4

I am working on a Udemy course using flask to record heights. I am at the point where we are using PostgreSQL, and I have it installed, and I have his code copied exactly:

from flask import Flask, render_template, request
from flask.ext.sqlalchemy import SQLAlchemy

app=Flask(__name__) 

app.config(['SQLALCHEMY_DATABASE_URI']='postgresql://postgres:password
@localhost/height_collector')

db=SQLAlchemy(app)

class Data(db.Model):
__tablename__='data'
id=db.Column(db.Integer, primary_key=True)
email_=db.Column(db.String(120), unique=True)
height_=db.Column(db.Integer)

def __init__(self, email_, height_):
    self.email_=email_
    self.height_=height_
@app.route("/")
def index():
   return render_template("index.html")

@app.route("/success", methods=["post"])
 def success():
if request.method=='POST':
    email=request.form['email_name']
    height=request.form['height_name']
    print(height,email)
return render_template("success.html")

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

Problem comes into play, when he says to run python in a virtual env, and then enter :db.create_all() to create a database in PostgreSQL and I get this error : File <'stdin'>, line 1 in NameError: Name 'db' is not defined

Not sure how to proceed, any input would be appreciated.

6 Answers 6

3

you can make a db.py where you can store the code db = SQLAlchemy(). Then import in in app.py. now you can able to call db. or just remove APP in db=SQLAlchemy(app)

Sign up to request clarification or add additional context in comments.

Comments

2

I think you probably need to run some of the other code first so that you define db and your table schema. Then you can run db.create_all().

from flask import Flask, render_template, request
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__) 

app.config(['SQLALCHEMY_DATABASE_URI'] = 
           'postgresql://postgres:password@localhost/height_collector')

db = SQLAlchemy(app)

class Data(db.Model):
    __tablename__ = 'data'
    id = db.Column(db.Integer, primary_key=True)
    email_ = db.Column(db.String(120), unique=True)
    height_ = db.Column(db.Integer)

    def __init__(self, email_, height_):
        self.email_ = email_
        self.height_ = height_

db.create_all()

Comments

1

Start python shell by running the command python. Then import db to define it:

from main import db
db.drop_all()
db.create_all()

Comments

1

I just faced this error and it is because I didn't import db before calling the db function. If you're running in terminal, 'from yourappname import db' and any other functions you are running.

//IN TERMINAL
from yourappname import db

Comments

0

You need to set the FLASK env variable.

create a .flaskenv file in the top directory of your project Add this to your .flaskenv file:

export FLASK_APP=myappfile.py

Install dotenv to your environment

pip install python-dotenv

Now if you run the app it should pick up your env variable.

Comments

0

Type the Following and it will work:

cd flask-app
venv\scripts\activate
python3
from app import db
db.create_all()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.