2016-10-04 10 views
0

私は困惑し、なぜ私がAssertionErrorを受け取っているのかわからないようです。私は現在、flask_restfulのlibを使って残りのAPIを処理しています。Flaskのsqlalchemyを使用し、安心してAssertionErrorを受け取る

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

任意の助けをいただければ幸いエラーメッセージは次のようになります

@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申し訳ありませんが2つありません。彼らは同じものです。私は、明快さと文脈のためにクラス全体を投稿したかっただけです。 – 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

関連する問題