Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 NameError:未定义名称“marks”_Python_Flask_Cassandra_Cql - Fatal编程技术网

Python NameError:未定义名称“marks”

Python NameError:未定义名称“marks”,python,flask,cassandra,cql,Python,Flask,Cassandra,Cql,在这里,我试图用过滤器从cassandra获取数据,在这里我需要获取大于或等于65分的学生,但是我得到了这个错误,我不明白为什么我会得到这个错误。我指的是林克。我也提到过类似的问题,但没有得到任何解决方案。 以下是我的python代码: from flask import * from flask_cqlalchemy import CQLAlchemy app = Flask(__name__) app.config['CASSANDRA_HOSTS'] = ['127.0.0.1'] ap

在这里,我试图用过滤器从cassandra获取数据,在这里我需要获取大于或等于65分的学生,但是我得到了这个错误,我不明白为什么我会得到这个错误。我指的是林克。我也提到过类似的问题,但没有得到任何解决方案。 以下是我的python代码:

from flask import *
from flask_cqlalchemy import CQLAlchemy

app = Flask(__name__)
app.config['CASSANDRA_HOSTS'] = ['127.0.0.1']
app.config['CASSANDRA_KEYSPACE'] = "emp"

db = CQLAlchemy(app)

class Student(db.Model):
    uid = db.columns.Integer(primary_key=True)
    marks = db.columns.Integer(primary_key=True)
    username = db.columns.Text(required=True)
    password = db.columns.Text()

@app.route('/merit')
    def show_merit_list():
        ob = Student.objects.filter(marks >= 65) 
        return render_template('merit.html', ml = ob)
这是我得到的错误日志:

Traceback (most recent call last)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 2463, in 
__call__
return self.wsgi_app(environ, start_response)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 2449, in 
wsgi_app
response = self.handle_exception(e)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1866, in 
handle_exception
reraise(exc_type, exc_value, tb)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/_compat.py", line 39, in 
reraise
raise value
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 2446, in 
wsgi_app
response = self.full_dispatch_request()
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1951, in 
full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1820, in 
handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/_compat.py", line 39, in 
reraise
raise value
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1949, in 
full_dispatch_request
rv = self.dispatch_request()
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1935, in 
dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/sudarshan/Downloads/PycharmProjects/try/try1.py", line 67, in show_merit_list
ob = Student.objects.filter(marks >= 65)
NameError: name 'marks' is not defined
您需要使用,请尝试:

将self对象传递给您的方法,从而允许它访问标记数据成员

将标记更改为self.marks


最后我找到了答案,我忘了使用allow_过滤。代码如下所示:

@app.route('/merit')
def show_merit_list():
    ob = Student.objects().filter() #all()
    ob = ob.filter(Student.marks >= 65).allow_filtering()
    return render_template('merit.html', ml = ob)

在过滤器中尝试self.marks,但当我删除>symbol并仅保留=symbol时,它正在工作并显示所有学生@explodinggayfish在传递参数时不能使用>symbol,如果是这样,marks>=65参数将被执行并转换为bool变量,这将导致错误,因为现在mark不再是参数名,而是变量。你可以试试x=5;printx>3在这种情况下,我认为您的数据或查询有问题。它是否与allow_筛选有关。'cassandra.cqlengine.query.QueryException:Where子句要求使用=、IN或CONTAINS集合与主键或索引字段进行比较。您可能需要考虑在CuxCurnEngress上管理索引的字段上设置CuutsEngindex。“当我这样做时,Ob= Surviv.Objest.FieldEngule.Meks= 65”是我得到的错误。
    @app.route('/merit')
    def show_merit_list(self):
        ob = Student.objects.filter(self.marks >= 65) 
        return render_template('merit.html', ml = ob)
@app.route('/merit')
def show_merit_list():
    ob = Student.objects().filter() #all()
    ob = ob.filter(Student.marks >= 65).allow_filtering()
    return render_template('merit.html', ml = ob)