2016-08-11 4 views
0
from flask import Flask 
import requests 
from flask_sqlalchemy import SQLAlchemy 
from flask_migrate import Migrate 

app = Flask(__name__) 
db = SQLAlchemy(app) 
migrate = Migrate(app, db) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/localDB' 


class MainResult(db.Model): 
    __tablename__ = "mainresult" 

    metadata_key = db.Column(db.String(128), primary_key=True) 
    individualResults = db.relationship('IndividualResult', backref='mainresult', lazy='dynamic', 
             cascade="all, delete-orphan") 

    def __init__(self, metadata_key): 
     self.metadata_key = metadata_key 

class IndividualResult(db.Model): 
    __tablename__ = "individualresult" 

    metadata_key = db.Column(db.String(128), db.ForeignKey('mainresult.metadata_key'), primary_key=True) 
    ts = db.Column(db.String(50), primary_key=True) 

    def __init__(self, metadata_key, ts): 
     self.metadata_key = metadata_key 
     self.ts = ts 




@app.route('/') 
def hello_world(): 
    # This throws an error. 
    print IndividualResult.query.get("03d49625b00643058a40eb8672e94f4e") 
    # Error too 
    IndividualResult.query.filter_by(metadata_key='03d49625b00643058a40eb8672e94f4e').first() 

    # This works. 
    print MainResult.query.get("03d49625b00643058a40eb8672e94f4e") 

    return 'Hello World!' 

if __name__ == '__main__': 
    app.run(debug=True) 

データが正しく挿入されている上記のコードがあります。 MainResult.queryを使用してクエリを実行することはできますが、IndividualResult.queryを使用することはできません。Flask SQL Alchemyを使用したクエリの属性エラー

返されたエラーがあり、

はAttributeError:「InstrumentedAttribute」オブジェクトもIndividualResult.queryに関連付けられた「比較」オブジェクトはいずれも、属性が

「を取得」している、彼らは両方ともほぼあるように、それはかなり独特です同じ

のフルスタックトレース:あなたは私を与える必要があるget使用

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 2000, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1991, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1567, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/Park/PycharmProjects/Flask_24Aug/Main_Flask.py", line 170, in hello_world() 
    print IndividualResult.query.get("03d49625b00643058a40eb8672e94f4e","1470860955") 
    File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 193, in __getattr__ 
    key) 
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with IndividualResult.query has an attribute 'get' 
+0

あなたは完全なエラーメッセージを投稿することができますか? – Anonymous

+0

@jphollowed、私はそれを追加しました –

答えて

0

print(IndividualResult.query.get(("03d49625b00643058a40eb8672e94f4e", "TSVALUE"))) 

それはまたです:あなたIndividualResultあなたがそうあなたがそれらの2つの列を指定する必要がありますことを照会する複合主キー(複数の列で作られた主キー)を定義した場合の主キー、トンあなたのクラスに__repr__を追加する価値があります。printのデバッグを行っているときに何が起こっているのかを簡単に確認することができます。

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
db = SQLAlchemy(app) 

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' 


class MainResult(db.Model): 
    __tablename__ = "mainresult" 

    metadata_key = db.Column(db.String(128), primary_key=True) 
    individualResults = db.relationship('IndividualResult', backref='mainresult', lazy='dynamic', 
             cascade="all, delete-orphan") 

    def __init__(self, metadata_key): 
     self.metadata_key = metadata_key 

    def __repr__(self): 
     return '<MR:{}>'.format(self.metadata_key) 


class IndividualResult(db.Model): 
    __tablename__ = "individualresult" 

    metadata_key = db.Column(db.String(128), db.ForeignKey('mainresult.metadata_key'), primary_key=True) 
    ts = db.Column(db.String(50), primary_key=True) 

    def __init__(self, metadata_key, ts): 
     self.metadata_key = metadata_key 
     self.ts = ts 

    def __repr__(self): 
     return '<IQ:{}>'.format(self.metadata_key) 


@app.route('/') 
def hello_world(): 
    print MainResult.query.get("12345") 
    # <MR:12345> 
    print IndividualResult.query.get(("12345", "AAA")) 
    # <IQ:12345> 
    print IndividualResult.query.filter_by(metadata_key='12345').first() 
    # <IQ:12345> 
    return 'Hello World!' 


# Populate with some test data: 
@app.before_first_request 
def data(): 
    db.create_all() 
    mr = MainResult(metadata_key='12345') 
    ir = IndividualResult(metadata_key='12345', ts='AAA') 
    db.session.add(mr) 
    db.session.add(ir) 
    db.session.commit() 

if __name__ == '__main__': 
    app.run(debug=True, port=5002) 
+0

残念ながら、私はまだ同じエラーが発生しています。 –

+0

だから、確かに私が貼り付けたコードを実行すると(私のマシン上で動作する)エラーが出るのですか?そのエラーが何かを貼り付けることができます、それは少し違いますので。 – Doobeh

関連する問題