Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶错误:ImportError无法导入名称';app&x27;从';app&x27;_Python_Sqlite_Flask - Fatal编程技术网

Python 烧瓶错误:ImportError无法导入名称';app&x27;从';app&x27;

Python 烧瓶错误:ImportError无法导入名称';app&x27;从';app&x27;,python,sqlite,flask,Python,Sqlite,Flask,我刚开始学习Flask,我正在构建我的第一个应用程序。 其想法是制作一个简单的应用程序,我可以将其存储在SQLite的学生、班级和教师中 为了实现这一点,我只编写了两个python文件: app.py->创建应用程序并定义路由 models.py->创建数据库模型以存储它们 不知何故,当我尝试将应用程序导入模型时,会出现以下错误: 回溯(最近一次呼叫最后一次): 文件“/Users/thiago/coding/eu-decidi/lib/python3.7/site-packages/flas

我刚开始学习Flask,我正在构建我的第一个应用程序。 其想法是制作一个简单的应用程序,我可以将其存储在SQLite的学生、班级和教师中

为了实现这一点,我只编写了两个python文件: app.py->创建应用程序并定义路由 models.py->创建数据库模型以存储它们

不知何故,当我尝试将应用程序导入模型时,会出现以下错误:

回溯(最近一次呼叫最后一次):
文件“/Users/thiago/coding/eu-decidi/lib/python3.7/site-packages/flask/cli.py”,第240行,在locate_应用程序中
__导入(模块名称)
文件“/Users/thiago/coding/eu-decidi/app.py”,第6行,在
从模型导入学生、教师、会议、学生标识符
文件“/Users/thiago/coding/eu-decidi/models.py”,第1行,在
从应用程序导入应用程序

导入错误:无法从“app”导入名称“app”(/Users/thiago/coding/eu decidi/app.py)
创建主文件夹,将除“app.py”文件外的所有文件和文件夹移动到该主文件夹中。保存然后运行。

乍一看,这可能是一个循环导入操作,因为在定义
app
之前需要尝试导入
app
models
。然而,我想指出,你的应用程序结构可以改进,使应用程序更容易理解。以下是我通常如何构建flask应用程序:


run.py
(应用程序入口点)

venv
(虚拟环境)

decidi
(您的应用程序包中的每个.py文件都可以作为包的一个模块导入)

-----
\uuuu init\uuuuu.py
(Python将此文件名视为包并将整个文件夹视为包)

-----
models.py

-----
模板

----------
index.html

-----
static
(提供css和图像等静态文件)


run.py
中,它非常简单。它会从应用程序包中导入应用程序,在您的情况下是,
decidi

from decidi import app

if __name__ == '__main__':
    app.run(debug=True)
decidi/\uuuuu init\uuuuuuuy.py
中,您可以将自己拥有的东西放在app.py中。请注意,模型的导入必须在
db
初始化后完成,否则将导致循环导入。某些编辑器可能会自动移动导入,在这种情况下,您需要关闭该功能

from flask import Flask, render_template, request, url_for, redirect, flash
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__) #application instance
app.config['SECRET_KEY']= 'my_secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///myDB.db' #path to database and its name
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #supress warning of changes on database
db = SQLAlchemy(app) #database instance

from decidi.models import Student # DO NOT PUT THIS AT THE TOP

@app.route('/')
@app.route('/index')
def index():
    return render_template("index.html")
decidi/models.py
中,您可以直接从您的应用程序包导入
db
,因为它位于包的
\uuuu init\uuuuuu.py
内:

from decidi import db

class Student(db.Model):
    #__tablename__ = 'student'
    student_id = db.Column(db.Integer, primary_key = True) #primary Key column, automatically generated IDs
    student_name = db.Column(db.String(80), index = True, unique = False) #name of student
    student_surname = db.Column(db.String(100), index = True, unique = False) #surname of student
    student_phone = db.Column(db.Integer, index=True, unique = True) #student phone number
    student_email = db.Column(db.String(200), index=True, unique = True) #student email
 
    def __repr__(self):
        return "Aluno: {} {}, telefone: {}".format(self.student_name,self.student_surname,self.student_phone)
要运行应用程序,请将cd放入
run.py
所在的目录,激活虚拟环境,然后只需
python3 run.py


为了简单起见,我只保留了大部分代码。但要点就在这里。如果这造成了混乱,请随时在评论中询问我。

请回答您的问题,并将错误全文和回溯放在一起。从.app import app尝试
。非常感谢阿古斯丁,刚刚尝试过,它真的很有效,而且使用起来更加干净!