我需要将所有数据从表格传输到html页面。在SQLAlchemy中,它将是这样的。
class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
first = db.Column(db.String(80))
last = db.Column(db.String(80))
@app.route('/authors')
def get_authors():
authors = Author.query.all()
# Serialize the queryset
result = authors_schema.dump(authors)
return jsonify({'authors': result.data})
Peewee中是否有类似 authors = Author.query.all()的内容?
答案 0 :(得分:2)
所以我做到了。
@app.route('/authors')
def get_authors():
authors = Author.select()
return render_template('aurhors.html', authors=authors)
在html中就是这样的。
{% for a in authors %}
<p>{{a.author_name}}</p>
{% endfor %}
我只是在开始学习python,所以感谢你的帮助。
答案 1 :(得分:0)
您要查找的是.dicts(),方法well-hidden in the docs,该方法返回特定于可重复的peewee的类型:
response = {'authors': []}
authors = Author.select()
for author in authors.dicts():
response['authors'].append(author)
答案 2 :(得分:0)
据我所知,尽管all
扩展名中有一个Dataset
方法,记录在here中,但在peewee中不存在直接等效项。您可以使用列表推导很容易地做到这一点:
authors = [author for author in Author.select()]
或者甚至是authors = list(Author)
。但是,如果您尝试将它们作为JSON返回,则将无法正常工作,因为您的作者列表由Author
的实例填充,并且Flask的JSONEncoder
不适用于此类型。您可以使用peewee的dicts()
方法来解决此问题:
authors = [author for author in Author.select().dicts()]
完整的示例如下:
@app.route('/authors')
def get_authors():
authors = [author for author in Author.select().dicts()]
return jsonify(authors)
我经常使用marshmallow
而不是使用dicts
进行序列化。例如,您像这样创建一个author_schema
:
from marshmallow import Schema, fields
class AuthorSchema(Schema):
id = fields.Integer(dump_only=True)
first = fields.String()
last = fields.String()
author_schema = AuthorSchema()
并像这样使用它(不显示导入):
@app.route('/authors')
def get_authors():
authors = author_schema(Author, many=True)
return jsonify(authors)