AttributeError:type object' Product'没有任何属性' all'烧瓶?

时间:2018-01-11 21:33:10

标签: python flask flask-sqlalchemy flask-restful

这是我的Flask应用程序的完整代码:

app = Flask(__name__)

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/test'

# Order matters: Initialize SQLAlchemy before Marshmallow
db = SQLAlchemy(app)
ma = Marshmallow(app)

class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    price = db.Column(db.Float)


class ProductSchema(ma.ModelSchema):
    class Meta:
        model = Product

@app.route('/')
def hello_world():
    products = Product.all()
    products_schema = ProductSchema(many=true)

    output = products_schema.dump(products).data
    return jsonify(output)

如您所见,我尝试从Product模型中提取数据:

products = Product.all()

我有这个错误:

request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "D:\Projects\Dist\backend\index.py", line 27, in hello_world
    products = Product.all()
AttributeError: type object 'Product' has no attribute 'all'

1 个答案:

答案 0 :(得分:1)

您忘记使用.query属性访问查询对象; .all()是该对象的方法:

products = Product.query.all()

来自Flask-SQLAchemy文档的Querying Reconds section

  

那么我们如何从数据库中取出数据呢?为此,Flask-SQLAlchemy在query类上提供Model属性。当您访问它时,您将在所有记录上返回一个新的查询对象。然后,您可以使用filter()等方法过滤记录,然后使用all()first()触发选择。如果您想使用主键,也可以使用get()

Model.query是(subclass of)SQLAlchemy Query class的实例。