python - flask 棉花糖属性错误 : List Object has no Attribute 'data'

标签 python flask flask-sqlalchemy python-3.7 flask-marshmallow

我有一个本地 SQLlite 数据库,我通过下面的代码连接了它:
'''

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.

我希望能帮助我解决这个问题的任何输入。

here is what i get in return

我尝试重新安装 virtualenv 和所有软件包,但我不明白为什么 .data 似乎不起作用。我面临的其他问题确实不是问题,因为代码的所有其他方面都在工作,包括创建数据库、插入记录和删除表。该查询似乎也有效,因为如果我使用 dict 数组来访问它。但是整个 json 字符串似乎不起作用。

最佳答案

删除 .data从您的代码中,只需编写 return jsonify(result) .
这将消除属性错误。

关于python - flask 棉花糖属性错误 : List Object has no Attribute 'data' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60529230/

相关文章:

python2 re.sub : abort catastrophic pattern on backtracking

python - 我在logging.py中的flask源上遇到了一些问题

python - 如何在 Flask-restful 中返回错误消息?

python - 创建 flask-SQLAlchemy BaseQuery 对象的两种方法 - 只有一种有效,为什么?

python - Flask-SQLAlchemy 无法在线程中更新数据

python - 更快、对 Pandas 友好的方式来完成这个算法?

python - 将多个 CSV 文件读取到 DataFrames 并以其原始文件名命名

Python 和 py2exe - 隐式导入模块

python - 将所有 python-rom 对象放入列表中

python - SQLAlchemy:当我更新models.py中的模型时,如何更新数据库中的表