Python 炼金术属性错误:';功能';对象没有属性';查询';

Python 炼金术属性错误:';功能';对象没有属性';查询';,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,我已经成功地将flask与flask sqlalchemy一起使用了数周,但突然我的代码出现了以下错误:AttributeError:“function”对象没有与这行代码相关的属性“query”: project\u choices=[(str(c.id)+':'+c.project\u name)用于Projects.query.all()中的c 似乎Alchemy Projects类没有成功创建,但我不知道为什么 主要路由文件: from flask import Flask, reque

我已经成功地将flask与flask sqlalchemy一起使用了数周,但突然我的代码出现了以下错误:AttributeError:“function”对象没有与这行代码相关的属性“query”:
project\u choices=[(str(c.id)+':'+c.project\u name)用于Projects.query.all()中的c

似乎Alchemy Projects类没有成功创建,但我不知道为什么

主要路由文件:

from flask import Flask, request, flash, url_for, redirect, render_template, session
from flask_sqlalchemy import SQLAlchemy
from app import db
from app import app
from app.forms import Basic_data_Form, Which_project#, Areas_form
from flask_bootstrap import Bootstrap
from app.models import Projects

@app.route('/Index', methods = ['GET', 'POST'])
def Index():

   if 'project_name' not in session:
      session['project_name'] = "0: No project selected"

   project_name = session['project_name'].split(':')[1]

   project_choices = [(str(c.id) + ': ' + c.project_name) for c in Projects.query.all()]  
   form2 = Which_project()
   form2.project_choice.choices = project_choices
   
   return render_template('Index.html', form2=form2, projects = Projects.query.filter_by(id=session['project_name'].split(':')[0]).all(), project_name=project_name)
init文件:

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap

app = Flask(__name__)
app.config.from_object(Config)

db = SQLAlchemy(app)

bootstrap = Bootstrap(app)

from app import routes
模型文件:

from app import db

class Projects(db.Model):
   id = db.Column(db.Integer, primary_key=True, autoincrement=True)
   project_name = db.Column(db.String(100))
   user_id = db.Column(db.String(100))
   address = db.Column(db.String(100))
   region = db.Column(db.String(100)) 
   postcode = db.Column(db.String(20))
   building_year = db.Column(db.Integer)
   climate_file = db.Column(db.String(100))
   building_TFA = db.Column(db.Float)
   thermal_mass = db.Column(db.String(100))
   winter_int_temp = db.Column(db.Float)
   summer_int_temp = db.Column(db.Float)
   height_above_sea = db.Column(db.Float)
   occupany = db.Column(db.Float)

   def __repr__(self):
        return '<Project {}>'.format(self.project_name)
从应用程序导入数据库
类别项目(db.Model):
id=db.Column(db.Integer,主键=True,自动递增=True)
项目名称=db.Column(db.String(100))
user_id=db.Column(db.String(100))
地址=db.Column(db.String(100))
region=db.Column(db.String(100))
邮政编码=db.Column(db.String(20))
建筑年=分贝列(分贝整数)
climate_file=db.Column(db.String(100))
建筑物=db.Column(db.Float)
热质量=分贝柱(分贝串(100))
冬季温度=分贝列(分贝浮动)
summer\u int\u temp=db.列(db.浮点)
海上高度=分贝柱(分贝浮标)
职业=分贝列(分贝浮动)
定义报告(自我):
返回“”。格式(self.project\u名称)

考虑实现将对象呈现为所需的当前字符串表示形式的类函数,或者实现

字符串方法:

类项目(db.Model):
...
id=db.Column(db.Integer,主键=True,自动递增=True)
项目名称=db.Column(db.String(100))
...
定义(自我):
返回f'{self.id}:{self.project_name}'
使用字符串方法,如下所示:

project\u choices=Projects.query.all()
form2=哪个_项目()
#str(x)可能可以工作,但如果不行,def下面的代码就可以工作
form2.project_choice.choices=[x.\u str_uuuuuuuuuux()表示项目_choices中的x]
混合属性方法:

来自sqlalchemy.ext.hybrid导入hybrid_属性,hybrid_方法
类别项目(db.Model):
...
id=db.Column(db.Integer,主键=True,自动递增=True)
项目名称=db.Column(db.String(100))
...
@杂化性
def项目选择(自我):
返回f'{self.id}:{self.project_name}'
按如下方式使用混合特性:

#仅访问混合属性
project\u choices=Projects.query(Projects.project\u choice).all()
form2=哪个_项目()
form2.project\u choice.choices=project\u choices

考虑实现将对象呈现为所需的当前字符串表示形式的类函数,或者实现

字符串方法:

类项目(db.Model):
...
id=db.Column(db.Integer,主键=True,自动递增=True)
项目名称=db.Column(db.String(100))
...
定义(自我):
返回f'{self.id}:{self.project_name}'
使用字符串方法,如下所示:

project\u choices=Projects.query.all()
form2=哪个_项目()
#str(x)可能可以工作,但如果不行,def下面的代码就可以工作
form2.project_choice.choices=[x.\u str_uuuuuuuuuux()表示项目_choices中的x]
混合属性方法:

来自sqlalchemy.ext.hybrid导入hybrid_属性,hybrid_方法
类别项目(db.Model):
...
id=db.Column(db.Integer,主键=True,自动递增=True)
项目名称=db.Column(db.String(100))
...
@杂化性
def项目选择(自我):
返回f'{self.id}:{self.project_name}'
按如下方式使用混合特性:

#仅访问混合属性
project\u choices=Projects.query(Projects.project\u choice).all()
form2=哪个_项目()
form2.project\u choice.choices=project\u choices

只需检查flask shell,您是否能够执行
项目
查询?这是一件奇怪的事情。我可以在shell中执行Project.query.all()命令,并显示Projects。但它似乎不想在运行脚本时显示。
(应用程序)samarcher201135@penguin:~/microblog$flask shell Python 3.7.3(默认值,2020年7月25日,13:03:44)[GCC 8.3.0]在linux应用程序上:App[production]实例:/home/samarcher201135/microblog/Instance>>>来自App import db>>>来自App.models import Projects>>>Projects.query.all()[]>>
只需在flask shell中进行检查,您是否能够执行
项目
查询?这很奇怪。我可以执行一个项目。在shell中执行query.all()命令,项目就会显示出来。但在运行脚本时,它似乎不想显示出来。
(应用程序)samarcher201135@penguin:~/微博$3.7.3(默认,2020年7月25日,13:03:44)[GCC 8.3.0]linux应用程序:应用程序[生产]实例:/home/samacher201135/microblog/Instance>>来自应用程序导入数据库>>>来自应用程序模型导入项目>>>项目.query.all()[]>>>
谢谢你的建议。它们都保留了.query方法,这是失败的。我尝试了str方法,但仍然出现了错误:文件“/home/samarcher201135/microblog/app/routes.py”,第59行,在索引project\u choices=Projects.query.all()中AttributeError:“function”对象没有属性“query”Hm…您能否验证是否正确导入了
Projects
?其他地方是否有同名的其他对象?此外,
print(type(Projects))的值是多少
在应用程序
main
中放置时?@samarcher刚刚将类的名称更改为某个随机名称,突然它起了作用!!!感谢您的建议。它似乎与其他“项目”混淆了“object…感谢这些建议。它们都保留了.query方法,这是失败的。我尝试了str方法,但仍然得到错误:Index project\u choices中的文件“/home/samarcher201135/microblog/app/routes.py”,第59行=