Задать вопрос
@maximifn
Пока ты спишь - твой враг качается

Как эффективно работать с базой данных в данном коде?

Есть код
for post in media:
    id = post['node']['id']
    like = post['node']['edge_liked_by']['count']
    comment = post['node']['edge_media_to_comment']['count']
    photo = post['node']['display_url']
    // ищем посты в базе данных
    post = cursor.execute("SELECT id FROM blog_instagram WHERE id LIKE "+id)
    count = 0
    // если есть такой id то увеличиваем счетчик на 1
    for row in post:
        count += 1
    values = "'" + str(like) + "', '" + str(comment) + "', '" + str(photo) + "', '" + str(id) + "'"
    // если счетчик > 0 то пропускаем т.к. посты должны быть уникальны в базе
    if (count == 0):
        cursor.execute("INSERT INTO blog_instagram VALUES(" + values + ")")
conn.commit()


Мне кажется что он не эффективен в работе с БД, допустим если постов будет пара сотен тысяч то будет тяжело для машины столько инфы обработать быстро, как можно это сделать эффективнее?
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@Stqs
senior software developer
Максим Стихарев,

то, что написано у вас, должно выглядеть примерно вот так (если я правильно понял):
for post in media:
    id = post['node']['id']
    if cursor.execute("SELECT count(id) FROM blog_instagram WHERE id = ?", id):
        continue

    cursor.execute("INSERT INTO blog_instagram(id, like, comment, photo) VALUES(?, ?, ?, ?)", 
        [id,
         post['node']['edge_media_to_comment']['count'],
         post['node']['edge_liked_by']['count'],
         post['node']['display_url']]
    )


но тут сразу возникает много вопросов )
1) правильно ли вы понимаете смысл поля id в реляционной базе данных (я спрашиваю потому что обычно его не вставляют)
если имеется в виду post_id или что-то типа того то тогда у вас там бардак в названиях который смущает все сообщество.
2) какова структура таблицы
3) чего именно вы добиться хотите
4) обычно уникальность поля гарантирует не девелопер своими кривыми дополнительными запросами, а база данных. почитайте про UNIQUE Constraint
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы