Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Flask中使用json返回数据库信息_Python_Json_Flask - Fatal编程技术网

Python 在Flask中使用json返回数据库信息

Python 在Flask中使用json返回数据库信息,python,json,flask,Python,Json,Flask,在使用GET方法时,我不知道如何从数据库返回信息,因为我的return语句中不断出现错误。我不断地犯错误,比如对象不可下标或与dicts有关的错误 我试过了 return jsonify({'developers': User.query.all()}) 我得到了错误TypeError:JSON不可序列化吗 当我尝试 return json.dumps(tuple[User.query.all()]) 我得到了错误。TypeError:“type”对象不可下标 from flask impo

在使用GET方法时,我不知道如何从数据库返回信息,因为我的return语句中不断出现错误。我不断地犯错误,比如对象不可下标或与dicts有关的错误

我试过了

return jsonify({'developers': User.query.all()})
我得到了错误TypeError: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()

有几个问题。首先,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\u all
    可能是个坏主意
  • 使用
    jsonify
    很好,因为它还处理内容类型头


您得到了什么错误?当我使用json.dumps时,类型对象是不可订阅的。我也尝试返回jsonify,但它得到的结果是对象不是JSON Serializable编辑您的问题并包含错误的回溯。您的意思是
tuple(User.query.all())
?使用
(…)
而不是
[…]
将类型转换为
元组
。还提供了完整的堆栈traceum,当我尝试tuple时,它表示要解包的值太多,需要3个。该表有3列,大约10行!我在这个问题上纠缠了很长时间。
> 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"
    }
  ]
}