2016-11-02 9 views
-1

GETメソッドを使用しているときにデータベースから情報を返す方法を理解できません。私はsubscriptableではないオブジェクトやdictsと関係するもののようなエラーを続けています。Flaskのjsonを使用してデータベース情報を返します

試しました。

return jsonify({'developers': User.query.all()}) 

私は、エラーTypeError例外を得た:0x038FC9D0で< メイン .Userオブジェクト>直列化可能

JSONではありません、私は

return json.dumps(tuple[User.query.all()]) 

をしようとすると、私はエラーを取得します。 TypeError: 'type'オブジェクトにサブスクリプトがありません

from flask import Flask, jsonify,json 
from flask_sqlalchemy import SQLAlchemy 


app = Flask(__name__) 
app.config.from_pyfile('Config.py') 
db = SQLAlchemy(app) 

class User(db.Model): 
    User_ID = db.Column(db.Integer, primary_key = True) 
    firstName = db.Column(db.String(20)) 
    lastName = db.Column(db.String(20)) 


    def __init__(self,firstName, lastName): 
     self.firstName = firstName 
     self.lastName = lastName 
     db.create_all() 

@app.route('/', methods = ['GET']) 
def index(): 
    return json.dumps(tuple[User.query.all()]) 

if __name__ == '__main__': 
    app.run() 
+0

あなたはどのようなエラーが発生していますか? –

+0

タイプオブジェクトはjson.dumpsを使用するときにサブスクリプトできません。私もリターンjsonifyを試みたが、それはオブジェクトがJSONシリアライズ可能でないというエラーを受け取る –

+1

あなたの質問を編集し、エラーのトレースバックを含めてください。 –

答えて

0

いくつかの問題があります。 SQLAlchemy db.Model型はjsonシリアライズ可能ではありません。その事実はtuple[...]を別のエラーとして使用しようとすると隠されますが、それをtuple(...)に修正しても元の問題に戻ります。

これはjsonがあなたのためにシリアライズするmixinを使用して動作するはずです。私はこれはまだdatetimeオブジェクトに問題があると思うが、それを処理するためにas_dictメソッドを変更することができます。

class JsonModel(object): 
    def as_dict(self): 
     return {c.name: getattr(self, c.name) for c in self.__table__.columns} 

class User(db.Model, JsonModel): 
    User_ID = db.Column(db.Integer, primary_key = True) 
    firstName = db.Column(db.String(20)) 
    lastName = db.Column(db.String(20)) 


    def __init__(self,firstName, lastName): 
     self.firstName = firstName 
     self.lastName = lastName 
     db.create_all() 

@app.route('/', methods = ['GET']) 
def index(): 
    return json.dumps([u.as_dict() for u in User.query.all()]) 

ヒント:開発中

  • app.debug = Trueをオンにするのも良いアイデアです。
  • あなたのinitでdb.create_allを実行することは悪い考えかもしれません。
  • jsonifyを使用すると、Content-Typeヘッダーも処理されるので便利です。

> kurl -i http://localhost:5000 
HTTP/1.0 200 OK 
Content-Type: application/json 
Content-Length: 102 
Server: Werkzeug/0.8.3 Python/2.7.10 
Date: Wed, 02 Nov 2016 05:28:42 GMT 

{ 
    "users": [ 
    { 
     "lastName": "Berry", 
     "User_ID": 1, 
     "firstName": "Sean" 
    } 
    ] 
} 
+0

ありがとうございます!これに長い間執着していた。 –

+0

ヒントを必ず読んでください:)そして喜んで助けてください。 – sberry

関連する問題