Как парсить mysql базу при помощи python3?

Подскажите, пожалуйста, новичку по следующему вопросу. Уровень знаний - книга «Простой Python. Современный стиль программирования» Любановича. И всё на этом :(

Python 3.5.2, PyMySQL (0.7.9), Ubuntu 16.04

Пытаюсь первую вещь осилить на практике, но что-то не могу никак разгуглить, как следует...

Есть БД Mysql. Нужно написать скрипт, который скачивает файлы по заданным ссылкам

ID:integer increment
URL: string
Name: string
Path: string
Downloaded: tinyint 1
NotFound: tinyint 1

Задача скрипта:
В цикле подключается к хранилищу по полю URL.
Сохраняет файл в пути Path с именем Name и ставит флаг Downloaded

Ошибки скачки:
NotFound - ставим флаг NotFound
Exception - неизвестная ошибка хранилища. Флаг не ставим, повторяем попытку при повторном старте скрипта

Ошибки структуры:
Чтобы изначально не создавать структуру - проще валидировать ее и создавать на ходу.
То есть нужно проверять Path на наличие, если нет - создавать

Может кто-нибудь хотя бы дать вектор, что нужно сделать и в какой последовательности? Хотя бы по шагам, что за чем нужно сделать, а я бы сам загуглил примеры кода. :)

К базе подключиться смог, а что дальше делать, не пойму:

import pymysql

db = pymysql.connect(host='localhost', port=, user='root', passwd='', db='Pictures')

cursor = db.cursor()
cursor.execute("SELECT * FROM URL")
  • Вопрос задан
  • 777 просмотров
Решения вопроса 1
@kgbplus
1. Прочтите вот эту книгу https://dmkpress.com/catalog/computer/programming/...
У вас отпадет большая часть вопросов.
2. По сути вопроса:
try:
    cursor.execute("SELECT * FROM index WHERE complete = FALSE")
except Exception as e:
    print(e)
    return None

Выбрал, что еще не скачано

import requests
session = requests.Session()

rows = cursor.fetchall()
for row in rows:
    print("open %s"%row[1])
    try:
        req = session.get(row[1])
#скачал что надо, обработал
    except AttributeError as e:
        print(e)
        return None


здесь скачиваем, вытаскиваем нужные данные

try:
    cursor.execute("INSERT INTO pages (fields) VALUES (%s)", ("что там напарсил",))
except Exception as e:
    print(e)
    return None


Парсим и записываем в базу

try:
    cursor.execute("UPDATE index SET complete = TRUE WHERE id = %s",(row[0],))
except Exception as e:
    print(e)
    return None


Отмечаем, что удалось скачать

db.commit()
Завершаем транзакцию

Ход мыслей примерно такой. Код для postgres, для мускула может немного отличаться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
  1. Нарисовать блок-схему алгоритма на функциональном уровне, не вдаваясь в подробности реализации.
  2. При работе с СУБД - язык SQL в помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы