这是我的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'
答案 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的实例。