将json加载到sqlite并在网站上显示所选数据

问题描述

我的目的是从this API中获取数据(书籍),在SQLite中保存一些选定的数据(使用SQLAlchemy模型),然后将这些数据显示为JSON。到目前为止,我已经做了类似的事情:

from flask import Flask,request,jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import requests
import json


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
ma = Marshmallow(app)

 
class Book(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(100))
    authors = db.Column(db.String(100))
    published_date = db.Column(db.String(100))
    categories = db.Column(db.String(100),default='N/A')
    average_rating = db.Column(db.Integer)
    ratings_count = db.Column(db.Integer)
    thumbnail = db.Column(db.String(300))

    def __repr__(self):
        return "Book " + str(self.id)

class BookSchema(ma.Schema):
    class Meta:
        fields = ('id','title','authors','published_date','average_rating','ratings_count','thumbnail')


book_schema = BookSchema()
books_schema = BookSchema(many=True) 


def populate_table():
    url = 'https://www.googleapis.com/books/v1/volumes?q=Finances'
    r = requests.get(url)
    books = json.loads(r.content,encoding='utf8')


    for book in books['items']:
        try:
            b = Book(title=json.dumps(book['volumeInfo']['title']),authors=json.dumps(book['volumeInfo']['authors']),published_date=json.dumps(book['volumeInfo']['publishedDate']),categories=json.dumps(book['volumeInfo']['categories']),average_rating=json.dumps(book['volumeInfo']['averageRating']),ratings_count=json.dumps(book['volumeInfo']['ratingsCount']),thumbnail=json.dumps(book['volumeInfo']['imageLinks']['thumbnail']))
        except KeyError:
            pass
        else:
            db.session.add(b)
    
    db.session.commit()


@app.route('/all',methods=['GET'])
def books_list():
    books = Book.query.all()
    result = books_schema.dump(books)
    return jsonify(result)


if __name__ == "__main__":
    app.run(debug=True)

首先,我想问一下,填充数据库的方法是否可以接受,或者有更好的方法吗? 其次,当我想在浏览器中显示所有书籍时,我得到的是这样的:

[
  {
    "authors": "[\"Graham D. Vinter\",\"Gareth Price\"]","average_rating": 5,"id": 1,"published_date": "\"2006\"","ratings_count": 1,"thumbnail": "\"http://books.google.com/books/content?id=8wz4MpHS4FsC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api\"","title": "\"Project Finance\""
  },{
    "authors": "[\"Denzil Watson\",\"Antony Head\"]","average_rating": 4.5,"id": 2,"published_date": "\"2007\"","ratings_count": 2,"thumbnail": "\"http://books.google.com/books/content?id=qyd8yKFWjHUC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api\"","title": "\"Corporate Finance\""
  },{
    "authors": "[\"Gil Fried\",\"Steven J. Shapiro\",\"Timothy D. DeSchriver\"]","average_rating": 4,"id": 3,"published_date": "\"2008\"","thumbnail": "\"http://books.google.com/books/content?id=VuTT3w0UUEYC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api\"","title": "\"Sport Finance\""
  }
]

如您所见,多余的斜杠和撇号是不必要的,但是我如何摆脱它们呢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...