SQLAlchemy NameError:名称'db'未定义(?)

时间:2017-07-21 03:06:44

标签: python html postgresql python-3.x flask

我正在使用烧瓶记录高度的Udemy课程。我正处于使用PostgreSQL的地步,我安装了它,并且我完全复制了他的代码:

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()

问题发挥作用,当他说在虚拟环境中运行python,然后输入:db.create_all()在PostgreSQL中创建数据库时我收到此错误:                   文件<'stdin'>,第1行                  NameError:名称'db'未定义

不确定如何继续,任何输入都将不胜感激。

5 个答案:

答案 0 :(得分:2)

我认为您可能需要先运行其他一些代码才能定义db和您的表架构。然后,您可以运行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()

答案 1 :(得分:2)

你可以创建一个db.py来存储代码db = SQLAlchemy()。然后在app.py中导入。现在你可以调用db了。或者只是删除APP

中的db=SQLAlchemy(app)

答案 2 :(得分:0)

通过运行命令python启动python shell。然后导入db来定义它:

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

答案 3 :(得分:0)

您需要设置FLASK env变量。

在项目的顶级目录中创建一个.flaskenv文件 将此添加到您的.flaskenv文件中:

export FLASK_APP=myappfile.py

在您的环境中安装dotenv

pip install python-dotenv

现在,如果您运行该应用程序,它将选择您的env变量。

答案 4 :(得分:-1)

输入以下内容,它将起作用:

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