2016-08-11 2 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를 사용하여 쿼리 할 수 ​​없습니다.특성 플라스크 SQL 쿼리를 사용하여 쿼리하는 중 오류가 발생했습니다.

입니다 반환 된 오류,

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 당신은 그래서 당신은 그 두 개의 열을 지정해야한다고 쿼리 복합 기본 키 (여러 열로 된 기본 키)를 정의한 당신은 을 클래스에 추가 할 가치가있어서 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

관련 문제