我有一个本地SQLlite DB,它是通过以下代码连接的:‘
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, Integer, String, Float
import os
from flask_marshmallow import Marshmallow, Schema
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'planets.db')
db = SQLAlchemy(app)
ma = Marshmallow(app)
@app.cli.command('db_create')
def db_create():
db.create_all()
print('Database created!')
@app.cli.command('db_drop')
def db_drop():
db.drop_all()
print('Database dropped!')
@app.cli.command('db_seed')
def db_seed():
mercury = Planet(planet_name='Mercury',
planet_type='Class D',
home_star='Sol',
mass=2.258e23,
radius=1516,
distance=35.98e6)
venus = Planet(planet_name='Venus',
planet_type='Class K',
home_star='Sol',
mass=4.867e24,
radius=3760,
distance=67.24e6)
earth = Planet(planet_name='Earth',
planet_type='Class M',
home_star='Sol',
mass=5.972e24,
radius=3959,
distance=92.96e6)
db.session.add(mercury)
db.session.add(venus)
db.session.add(earth)
test_user = User(first_name='William',
last_name='Herschel',
email='test@test.com',
password='P@ssw0rd')
db.session.add(test_user)
db.session.commit()
print('Database seeded!')
@app.route('/planets', methods=['GET'])
def planets():
planets_list = Planet.query.all()
result = planets_schema.dump(planets_list)
return jsonify(result.data)
# database models
class User(db.Model):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
email = Column(String, unique=True)
password = Column(String)
class Planet(db.Model):
__tablename__ = 'planets'
planet_id = Column(Integer, primary_key=True)
planet_name = Column(String)
planet_type = Column(String)
home_star = Column(String)
mass = Column(Float)
radius = Column(Float)
distance = Column(Float)
class UserSchema(ma.Schema):
class Meta:
fields = ('id', 'first_name', 'last_name', 'email', 'password')
class PlanetSchema(ma.Schema):
class Meta:
fields = ('planet_id', 'planet_name', 'planet_type', 'home_star', 'mass', 'radius', 'distance')
user_schema = UserSchema()
users_schema = UserSchema(many=True)
planet_schema = PlanetSchema()
planets_schema = PlanetSchema(many=True)
if __name__ == '__main__':
app.run()
'''
I have tried passing return statement with return results[0] and it does work, but when i try to jsonify the same results, I am getting an error that it has no data.我喜欢任何可以帮助我解决这个问题的输入。

我试着重新安装了virtualenv和所有的软件包,但我不明白为什么.data似乎不能工作。我面临的其他问题并不是真正的问题,因为代码的所有其他方面都在工作,包括创建数据库、插入记录和删除表。查询似乎也可以工作,因为如果我使用dict数组来访问相同的数据。但是整个json字符串似乎不起作用。
发布于 2020-04-16 15:40:34
从代码中删除.data,只需编写return jsonify(result)即可。这将删除属性Error。
发布于 2020-03-13 07:14:51
您不需要访问.data属性。因为转储已经返回了数据。因此,请尝试删除.dump,然后尝试运行应用程序。它应该会给出你想要的输出。
发布于 2020-03-10 05:56:46
最好的解决方案是使用以下库来解决此问题。在这里,使用Flask-Marshmallow帮助我序列化和管理json格式的数据。
https://stackoverflow.com/questions/60529230
复制相似问题