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

3

我正在进行一门使用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中创建数据库时,我遇到了这个错误: File <'stdin'>, line 1 in NameError: Name 'db' is not defined
不确定如何继续,欢迎提供任何意见。
6个回答

3
你可以创建一个名为db.py的文件,在其中存储代码db = SQLAlchemy()。然后在app.py中导入它。现在你可以调用db了。或者只需将db=SQLAlchemy(app)中的APP删除。

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

我刚刚遇到了这个错误,是因为在调用db函数之前我没有导入db。如果你在终端中运行,请先从"yourappname"导入db以及其他相关的函数。

//IN TERMINAL
from yourappname import db

0

您需要设置FLASK环境变量。

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

export FLASK_APP=myappfile.py

在你的环境中安装dotenv

pip install python-dotenv

现在,如果您运行该应用程序,则应选择您的环境变量。

0

输入以下内容即可正常运行:

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

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接