2016-10-04 41 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