2016-10-04 50 views
0

我一直难住,似乎无法弄清楚为什么我收到一个AssertionError。我目前正在使用flask_restful lib工作其余的api。我通过查询:使用Flask sqlalchemy和restful接收AssertionError

@staticmethod 
def find_by_id(id, user_id): 
    f = File.query.filter_by(id=id).first() #Error is happening here 
    if f is not None: 
     if f.check_permission(user_id)>=4: 
      return f 
     print f.check_permission(user_id) 
     FileErrors.InsufficientFilePermission() 
    FileErrors.FileDoesNotExist() 

错误信息是这样的:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2000, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1991, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 271, in error_router 
    return original_handler(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1567, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 268, in error_router 
    return self.handle_error(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 271, in error_router 
    return original_handler(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1531, in handle_user_exception 
    assert exc_value is e 
AssertionError 

这是我的文件模型看起来像:

class File(db.Model): 
id = db.Column(db.Integer, primary_key=True) 
user_id = db.Column(db.Integer) 
parts = db.Column(db.Integer) 
size = db.Column(db.Integer) 
name = db.Column(db.String(100)) 

def __init__ (self, file_info): 
    self.user_id = file_info['user_id'] 
    self.parts = file_info['parts'] 
    self.size = file_info['size'] 
    self.name = file_info['name'] 

@staticmethod 
def create(file_info): 
    return add_to_db(File(file_info)) 

@staticmethod 
def delete(file_id, user_id): 
    pass 

def check_permission(self,user_id): 
    permission = 0 
    print 'self.user_id {}'.format(self.user_id) 
    print 'user_id {}'.format(user_id) 
    if self.user_id == user_id: 
     return 7 
    fs = FileShare.find_by_file_and_user_id(self.id, user_id) 
    if fs is not None: 
     permission = fs.permission 
    return permission 

@staticmethod 
def find_by_id(id, user_id): 
    f = File.query.filter_by(id=id).first() #Error is happening here 
    if f is not None: 
     if f.check_permission(user_id)>=4: 
      return f 
     print f.check_permission(user_id) 
     FileErrors.InsufficientFilePermission() 
    FileErrors.FileDoesNotExist() 

任何帮助,将不胜感激。提前致谢。

+0

@vishes_shell抱歉没有两个。它们是同一个。我只想在整个班级中发布清晰和上下文。 – h3y4w

+0

对不起,我没有提到有滚动条,因为代码很长。 –

回答

0

虽然我无法弄清楚,为什么出现错误时,我知道如何以及如何阻止它。它被创建是因为查询在提交后没有立即提取实时数据。防止它的方法是使用db.session.query()。所以在我的例子,我会改变:

f = File.query.filter_by(id=id).first()

f = db.session.query(File).filter_by(id=id).first()

出于某种原因,该工程。虽然我不知道为什么。

编辑:它似乎有与类没有收到更新的会话做。目前我推荐在会话中使用查询。

0

您确定要在您的过滤器中使用赋值运算符而不是比较吗?试着用==替换=,看看它是否能解决你的问题。

f = File.query.filter_by(id == id).first() 

哈努哈利

+0

可悲的是它不起作用。在我的其他一些查询中,我喜欢它的上面,看起来没有问题。它返回的错误是“TypeError:filter_by()只需要1个参数(给出2)”。 – h3y4w