2016-10-04 5 views
0

나는 어설프게 만들어져 왜 AssertionError를 받는지 알 수 없습니다. 현재 flask_restful lib를 사용하여 나머지 api 작업을하고 있습니다. 나는에 의해 쿼리입니다 :Flask의 sqlalchemy를 사용하여 편안한 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() 

오류 메시지은 다음과 같다 : 어떤 도움을 주시면 감사하겠습니다

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() 

:

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 

이 내 파일 모델처럼 보이는 방법이다. 미리 감사드립니다.

+0

@vishes_shell 미안하지만 두 가지가 없습니다. 그것들은 같은 것이다. 나는 단지 선명도와 문맥을 위해 전체 수업을 게시하고 싶었다. – h3y4w

+0

죄송합니다. 코드가 길어서 스크롤 막대가 있다는 것을 언급하지 않았습니다. –

답변

0

. 이는 u 리가 확약 후에 라이브 데이터를 가져 오지 않기 때.에 작성됩니다. 이를 방지하는 방법은 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