Я пытаюсь получить все отзывы, связанные со всеми предприятиями, расположенными в Нью-Йорке, из набора данных Yelp Academi c. HTTP-запросы отправляются в Yelp Fusion API. Я использую sqlite3 для хранения записей в базе данных. Кажется, что sqlite не может обрабатывать такой большой объем данных. Не удается ввести значения полей в таблицу просмотра после выполнения одного вызова API. Ниже приведен сценарий.
import requests
import json
import sqlite3
api_key = ########
headers = {'Authorization': 'Bearer %s' % api_key}
conn = sqlite3.connect('businesses.db')
cur = conn.cursor()
cur.executescript('''
Drop Table If Exists Review;
CREATE TABLE Review(
user_id TEXT Not Null Primary Key,
business_id TEXT Not Null,
time_created TEXT Unique,
rating TEXT,
review TEXT)
''')
cur.execute(''' Select business_id From Business''')
for row in cur:
business_id = row[0]
print(business_id)
url = 'https://api.yelp.com/v3/businesses/' + business_id + '/reviews'
req = requests.get(url, headers=headers)
js = json.loads(req.text)
for item in js['reviews']:
cur.execute(''' Insert Into Review(business_id, user_id,
time_created, rating, review) Values(?,?,?,?,?) ''',
(business_id, item['user']['id'], item['time_created'], item['rating'], item['text']))
Я сохранил все значения business_id в отдельной таблице с именем Business, поскольку вызов API, необходимый для получения всех этих записей, отличается.
Проблема связана с cur.execute(''' Insert Into Review(business_id, user_id,
time_created, rating, review) Values(?,?,?,?,?) ''',
(business_id, item['user']['id'], item['time_created'], item['rating'], item['text']))
, который не удается ввести значения полей. Однако l oop перебирает все business_ids. Есть 976 уникальных значений business_id.
Может кто-нибудь сказать мне, если проблема в самом sqlite или есть ошибка в скрипте и нужно ли мне переключиться на mysql .connector.