Как стать автором
Обновить

Комментарии 9

А почему "чайникам" не объясняется что это за строчка и почему она везде пишется? Что такое "cursor"?

cursor = connection.cursor()  

Здравствуйте! Извините пожалуйста, я забыл рассказать о том, что такое cursor. Я скоро добавлю пояснение к этой строке. Спасибо большое.

sqlite3 есть не всегда. В некоторых случаях (всего-то ~25 млн. экз. OpenOffice|LibreOffice в РФ) Python на PC есть, но c "вырезанным" модулем sqlite3 и менеджером пакетов pip. И если pip можно вручную доустановить, даже не имея прав администратора, то sqlite3 через pip не установится.

Решение: идем на python.org, качаем embeddable-дистр нужной разрядности и той же версии (3.8, т.е. из этих двух https://www.python.org/downloads/release/python-3810/), заходим в архив (и внутри еще в один архив) и копируем папку sqlite3 и файл sqlite.dll в папку lib (в ней же лежит и папка site-packages) внутри OpenOffice|LibreOffice. Это позволит полноценно работать с БД Sqlite макросами на Basic/Python, c поддержкой контекста офисного документа (ввод/вывод данных на него, использование в качестве "форм" итд). Это аналогично применению ADO в VBA c Excel - быстро, современно.

Вместо длинного и уникального для каждой таблицы

# Преобразуем результаты в список словарей
users_list = []
for user in users:
  user_dict = {
    'id': user[0],
    'username': user[1],
    'email': user[2],
    'age': user[3]
  }
users_list.append(user_dict)

можно писать короткое и универсальное

connection.row_factory = sqlite3.Row

Тогда все fetch'и будут возвращать не кортежи, а словаре-кортежи — можно обращаться к полям и по индексу, и по имени.

Хм. Интересно. Я если честно не знал, что так можно делать ?. Спасибо за совет! Я наверно скоро поменяю код в своем туториале, спасибо еще раз!

Почему-то пропущено несколько весьма важных моментов.

Первое - про создание БД. Надо бы явно написать, что при отсутствии указанного файла БД - создаётся новая, пустая БД. И дать настоятельную рекомендацию указывать полный путь к файлу существующей БД. Бывали вопросы типа "подключаюсь к файлу БД, но ни таблиц, ни данных нету...", а товарищ просто путь не указал. Да, неплохо бы указать, где именно создаётся файл БД, если путь вообще не указан.

Далее - обязательно надо подробно рассказать о дебаге. Как обнаружить, что запрос выполнен с ошибкой? как получить текст ошибки? как определить, в чём проблема, хотя бы первично? Очень важные моменты, но про них ни полслова.

Обработка NULL-значений - вообще-то ожидалось, что будет рассказано, как работать в питоне с возвращённым NULL. Вы ж не по SQL мануал пишете...

Получение результатов запроса в виде списка кортежей - а где пример того, как работать с коллекцией наборов? с результатом работы хранимой процедуры, в которой несколько SELECT... как получить результат каждого из них?

Использование подготовленных (prepared) запросов для повышения производительности - не, а где собственно демонстрация нескольких обращений с разными параметрами? а ведь декларируете...

В общем, пока сыровато. И вообще мануал не по SQLite и не по SQL. Всего понемножку. То есть содержание очень приблизительно соответствует теме. Думаю, следует доработать, должна получиться полезная статья.

Здравствуйте! Спасибо за советы! Я действительно многое упустил в моем туториале. Я обязательно постараюсь доработать эту статью. Спасибо еще раз за совет!

Например, давайте выберем пользователей с неизвестным возрастом

Не понял, а где "IS NULL" и т.п.?

Для 'with ...' не хватает информации нужно ли сохранять изменения данных. Пример только с SELECT'ом

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории