Python 炼金术属性错误:';功能';对象没有属性';查询';
我已经成功地将flask与flask sqlalchemy一起使用了数周,但突然我的代码出现了以下错误:AttributeError:“function”对象没有与这行代码相关的属性“query”: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
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行=