【问题标题】:SQLAlchemy NameError: Name 'db' is not defined (?)SQLAlchemy NameError:名称'db'未定义(?)
【发布时间】:2017-12-26 22:54:41
【问题描述】:

我正在使用烧瓶记录高度的 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 中创建数据库时,我得到了这个错误: 文件 ,第 1 行 NameError: 名称 'db' 未定义

不知道如何继续,任何意见将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    您可以创建一个 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()
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          您需要设置 FLASK 环境变量。

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

          export FLASK_APP=myappfile.py
          

          将 dotenv 安装到您的环境中

          pip install python-dotenv
          

          现在,如果您运行应用程序,它应该会获取您的环境变量。

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

            • 一切正常吗?这种方式对我有用!
            猜你喜欢
            • 2020-12-12
            • 2022-01-27
            • 2017-11-27
            • 1970-01-01
            • 1970-01-01
            • 2018-01-24
            • 1970-01-01
            • 2021-04-15
            相关资源
            最近更新 更多