Python 在Flask中使用json返回数据库信息
在使用GET方法时,我不知道如何从数据库返回信息,因为我的return语句中不断出现错误。我不断地犯错误,比如对象不可下标或与dicts有关的错误 我试过了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
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"
}
]
}