Как выгрузить данные из sqlite в excel python
Задача на выгрузку данных из одной таблицы, с одним условием для фильтра решается посредством создания простого SQL-запроса. Но она легко становится трудоемкой в исполнении, если в фильтрации применить множество условий. Давайте представим, что необходимо выгрузить данные из одной таблицы по фильтру, где первые две цифры ИНН начинаются на «66». SQL-запрос будет выглядеть так:
Вроде ничего сложного, но, если изменить условие фильтрации на поиск по 2 млн уникальных ИНН, SQL-запрос будет выглядеть так:
select * from tabl where inn = '66******01' or inn = '66******02' or inn = '66******03' or inn = '66******04' or inn = '66******05' or inn = '66******06' or inn = '66******07' . or inn = '66******nn'
Исходя из своего опыта, такой запрос запустить не получится из-за ограничения СУБД на количество условий в 10 тыс. значений (Ограничения СУБД могут быть разные). В нашем случае потребуется создать 200 запросов и запустить их по отдельности. В итоге мы получим 200 файлов с данными, которые необходимо собрать в один. Сложно представить сколько потребуется на это времени и сил, но с помощью Python и библиотеки «cx_Oracle» задача решается легко.
Проверяем версию (должна быть > 3.0):
Прописываем дескриптор соединения Oracle:
ConnectStr = """(DESCRIPTION=(ADDRESS=(PROTOCOL=. )(Host=. ) (Port= . ))(CONNECT_DATA=(SERVICE_NAME= . )))"""
Прописываем логин и пароль (при доменной аутентификации оставляем '/'):
Функция, в которой создается экземпляр класса connect, он обеспечит взаимодействие с сервером Oracle:
def getConn(Login, ConnectStr): conn=None nn=0 while conn==None: try: conn=cx_Oracle.connect(Login + '@' + ConnectStr) except cx_Oracle.DatabaseError as e: ers,=e.args nn=nn+1 print (nn,end='\r') if ers.code!=2391: print ('Ошибка Oracle ', ers.code) break time.sleep(5) return conn
Функция, в которой создается курсор и выполняется запрос:
Подключаемся к серверу:
Файл, в котором одна колонка со всеми значениями ИНН:
Присваиваем имя файла, в который выгрузится результат:
r='' - для собора строк в «with», которые подставим в SQL-запрос,
h = 0 - проверки наличия заголовков,
l = 0 — счетчик строк для запуска SQL-запроса,
ll = 0 — счетчик строк для проверки на остаток,
cnt = 10000 — количество строк для запуска SQL-запроса.
Цикл для создания и запуска SQL-запросов:
Отправляем SQL-запрос и обрабатываем полученную выгрузку:
Таким образом, с помощью Python мы автоматизировали процесс создания, запуска SQL-запросов и сохранения результатов в один файл, избежали больших трудозатрат, при этом:
Как мне выгрузить данные и только данные, а не схему некоторых таблиц SQLite3 базы данных (не всех таблиц)? Дамп должен быть в формате SQL, так как он должен быть легко повторно введен в базу данных позже и должен выполняться из командной строки. Что-то вроде
но без сброса схемы и выбора таблиц для сброса.
В какой формат? Что-нибудь конкретное, или вы просто ищете резервную копию, удобочитаемую? Пожалуйста уточни.
Я хочу сделать дамп в формате SQL, чтобы можно было легко его восстановить. Я добавил эту информацию к основному вопросу.
Вы не говорите, что хотите сделать с выгруженным файлом.
Я бы использовал следующее, чтобы получить файл CSV, который я могу импортировать почти во все
Если вы хотите повторно вставить в другую базу данных SQLite, тогда:
Есть ли способ сделать это программно с помощью операторов SQL? Я могу понять, как это сделать с помощью интерпретатора, но что, если я захочу написать сценарий?
Вы можете поместить свои операторы в файл (например, sample.txt), а затем вызвать его, используя: sqlite3 db.sq3
« Или использовать команду .once вместо .output и вывод будет перенаправлен только для одной следующей команды , прежде чем возвращаться к консоли. Использование .output без аргументов , чтобы снова начать писать на стандартный вывод. » SQLite документы
Вы можете сделать это, получив разницу команд .schema и .dump. например, с помощью grep:
data.sql файл будет содержать только данные без схемы, примерно так:
Я надеюсь, это поможет вам.
Для меня некоторые расоны не работают. Мне нужно использовать вокруг. sqlite3 storage/db/jobs.s3db .schema jobs > schema.sql не работает, но echo '.schema' jobs | sqlite3 storage/db/jobs.s3db > schema.sql работает нормально
Это казалось хорошим решением, но в моем случае большинство строк удаляются с помощью grep. Команда .schema генерирует схему каждой таблицы на нескольких строках, поэтому есть строка, содержащая только ); , и grep удаляет все строки, содержащие ); Добавление -x параметра в grep решает эту проблему.
Вы можете указать один или несколько аргументов таблицы для специальной команды .dump, например sqlite3 db ".dump 'table1' 'table2'" .
когда я добавляю несколько имен таблиц, как вы упомянули, это дает мне следующий результат: Использование: .dump? - preserve-rowids? ? КАК ОБРАЗЕЦ?
@mwm Наблюдаю такую же проблему в sqlite3 3.31.1 (2020/01/27) . В журнале изменений об этом ничего не говорится. (Кстати, --preserve-rowids работает, но совсем не документировано.)
Не лучший способ, но, по крайней мере, не требует внешних инструментов (кроме grep, который в любом случае является стандартным для ящиков * nix)
но вам нужно выполнить эту команду для каждой таблицы, которую вы ищете.
Обратите внимание, что это не включает схему.
использование grep -v '^CREATE; прервется, если в CREATE операторах есть разрывы строк (что иногда бывает). Лучше всего, ИМО, вообще не CREATE удалять утверждения автоматически , а вручную редактировать их. Просто используйте любой текстовый редактор, который вам нужен, и найдите CREATE и вручную удалите эти утверждения. Пока база данных не огромна (и, поскольку вы используете sqlite, я предполагаю, что это примечание), это довольно просто.
Любой ответ, который предлагает использовать grep для исключения CREATE строк или просто захватить INSERT строки из sqlite3 $DB .dump вывода, потерпит неудачу. В CREATE TABLE список команд один столбец в каждой строке (так исключая CREATE не получите все это), и значения на INSERT линии могут иметь встроенные символы новой строки (так что вы не можете получить только те INSERT строки).
Проверено на sqlite3 версии 3.6.20.
Если вы хотите исключить определенные таблицы, вы можете отфильтровать их $(sqlite $DB .tables | grep -v -e one -e two -e three) , или если вы хотите получить определенное подмножество, замените его на one two three .
В качестве улучшения ответа Пола Игана это можно сделать следующим образом:
Предостережение, конечно, в том, что у вас должна быть установлена программа grep.
Мне нравится этот. В качестве дополнительного бонуса он по-прежнему работает, если у вас есть сброшенный файл SQL, просто cat database.sql | grep '^INSERT' > database_inserts.sql (то же самое для схемы, замените на grep '^CREATE'
Ничего лишнего. cat Не стоит в принципе ничего , чтобы выполнить и делает цепь входа к выходу намного понятнее. Конечно, вы также можете написать, < database.sql grep '^INSERT' . но явный канал намного легче читать.
когда я добавляю несколько имен таблиц, как вы упомянули, это дает мне следующий результат: Использование: .dump? - preserve-rowids? ? КАК ОБРАЗЕЦ?
-1: Искать строки с помощью CREATE - бесполезная идея. Почти каждое представление или триггер, особенно если оно содержит комментарии, требует более одной строки.
В Python, Java или любом языке высокого уровня .dump не работает. Нам нужно вручную кодировать преобразование в CSV. Приведу пример на Python. Другие примеры были бы признательны:
Если у вас есть данные панели, другими словами, многие отдельные записи с идентификаторами добавляют это в внешний вид with, а также выводят сводную статистику:
Включать только ВСТАВКИ
Легко реализовать, но это не удастся, если в какой-либо из ваших столбцов будут добавлены новые строки.
Режим вставки SQLite
Это хорошее и настраиваемое решение, но оно не работает, если в ваших столбцах есть объекты blob, такие как тип Geometry в Spaceite.
Дифференцируйте дамп со схемой
Не знаю почему, но у меня не работает
Вероятно, на этот вопрос нет лучшего ответа, но тот, который работает для меня, - это grep the вставки с учетом того, что это новые строки в значениях столбцов с таким выражением
Чтобы выбрать таблицы, которые должны быть сброшены, .dump допускается аргумент LIKE, соответствующий именам таблиц, но если этого недостаточно, вероятно, лучший вариант - простой сценарий
или что-то более сложное, чтобы уважать внешние ключи и инкапсулировать весь дамп только в одной транзакции
Учтите, что выражение grep завершится ошибкой, если ); в любом из столбцов присутствует строка.
Данные очень легко читать из файлов CSV, но они часто хранятся в табличной форме в формате Excel.
pandas предоставляет специальные функции для работы с ним:
Функция read_excel() может читать из файлов Excel 2003 (.xls) и Excel 2007 (.xlsx). Это возможно благодаря модулю xlrd .
Для начала откроем файл Excel и введем данные со следующий таблиц. Разместим их в листах sheet1 и sheet2 . Сохраним файл как ch05_data.xlsx .
white | red | green | black | |
---|---|---|---|---|
a | 12 | 23 | 17 | 18 |
b | 22 | 16 | 19 | 18 |
c | 14 | 23 | 22 | 21 |
yellow | purple | blue | orange | |
---|---|---|---|---|
A | 11 | 16 | 44 | 22 |
B | 20 | 22 | 23 | 44 |
C | 30 | 31 | 37 | 32 |
Для чтения данных из файла XLS нужно всего лишь конвертировать его в Dataframe , используя для этого функцию read_excel() .
По умолчанию готовый объект pandas Dataframe будет состоять из данных первого листа файла. Но если нужно загрузить и второй, то достаточно просто указать его номер (индекс) или название в качестве второго аргумента.
yellow | purple | blue | orange | |
---|---|---|---|---|
A | 11 | 16 | 44 | 22 |
B | 20 | 22 | 23 | 44 |
C | 30 | 31 | 37 | 32 |
yellow | purple | blue | orange | |
---|---|---|---|---|
A | 11 | 16 | 44 | 22 |
B | 20 | 22 | 23 | 44 |
C | 30 | 31 | 37 | 32 |
Запись работает по тому же принципу. Для конвертации объекта Dataframe в Excel нужно написать следующее.
Jan2015 | Feb2015 | Mar2015 | Apr2015 | |
---|---|---|---|---|
exp1 | 0.671044 | 0.437715 | 0.497103 | 0.070595 |
exp2 | 0.864018 | 0.575196 | 0.240343 | 0.471081 |
exp3 | 0.957986 | 0.311648 | 0.381975 | 0.622556 |
exp4 | 0.407909 | 0.015926 | 0.180611 | 0.579783 |
В рабочей директории будет создан файл с соответствующими данными.
Данные JSON
JSON (JavaScript Object Notation) стал одним из самых распространенных стандартных форматов для передачи данных в сети.
Одна из главных его особенностей — гибкость, хотя структура и не похожа на привычные таблицы.
В этом разделе вы узнаете, как использовать функции read_json() и to_json() для использования API. А в следующем — познакомитесь с другим примером взаимодействия со структурированными данными формата, который чаще встречается в реальной жизни.
Начнем с самого полезного примера, когда есть объект Dataframe и его нужно конвертировать в файл JSON. Определим такой объект и используем его для вызова функции to_json() , указав название для итогового файла.
Он будет находится в рабочей папке и включать все данные в формате JSON.
Обратную операцию можно выполнить с помощью функции read_json() . Параметром здесь должен выступать файл с данными.
down | left | right | up | |
---|---|---|---|---|
black | 5 | 7 | 6 | 4 |
blue | 13 | 15 | 14 | 12 |
red | 9 | 11 | 10 | 8 |
white | 1 | 3 | 2 | 0 |
Это был простейший пример, где данные JSON представлены в табличной форме (поскольку источником файла frame.json служил именно такой объект — Dataframe ). Но в большинстве случаев у JSON-файлов нет такой четкой структуры. Поэтому нужно конвертировать файл в табличную форму. Этот процесс называется нормализацией.
Библиотека pandas предоставляет функцию json_normalize() , которая умеет конвертировать объект dict или список в таблицу. Для начала ее нужно импортировать:
Создадим JSON-файл как в следующем примере с помощью любого текстового редактора и сохраним его в рабочей директории как books.json .
Как видите, структура файла более сложная и не похожа на таблицу. В таком случае функция read_json() уже не сработает. Однако данные в нужной форме все еще можно получить. Во-первых, нужно загрузить содержимое файла и конвертировать его в строку.
После этого можно использовать функцию json_normalize() . Например, можно получить список книг. Для этого необходимо указать ключ books в качестве второго параметра.
price | title | |
---|---|---|
0 | 23.56 | XML Cookbook |
1 | 50.70 | Python Fundamentals |
2 | 12.30 | The NumPy library |
3 | 28.60 | Java Enterprise |
4 | 31.35 | HTML5 |
5 | 28.30 | Python for Dummies |
Функция считает содержимое всех элементов, у которых ключом является books . Все свойства будут конвертированы в имена вложенных колонок, а соответствующие значения заполнят объект Dataframe . В качестве индексов будет использоваться возрастающая последовательность чисел.
Однако в этом случае Dataframe включает только внутреннюю информацию. Не лишним было бы добавить и значения остальных ключей на том же уровне. Для этого необходимо добавить другие колонки, вставив список ключей в качестве третьего элемента функции.
price | title | writer | nationality | |
---|---|---|---|---|
0 | 23.56 | XML Cookbook | Mark Ross | USA |
1 | 50.70 | Python Fundamentals | Mark Ross | USA |
2 | 12.30 | The NumPy library | Mark Ross | USA |
3 | 28.60 | Java Enterprise | Barbara Bracket | UK |
4 | 31.35 | HTML5 | Barbara Bracket | UK |
5 | 28.30 | Python for Dummies | Barbara Bracket | UK |
Результатом будет Dataframe с готовой структурой.
Формат HDF5
До сих пор в примерах использовалась запись данных лишь в текстовом формате. Но когда речь заходит о больших объемах, то предпочтительнее использовать бинарный. Для этого в Python есть несколько инструментов. Один из них — библиотека HDF5 .
HDF расшифровывается как hierarchical data format (иерархический формат данных), а сама библиотека используется для чтения и записи файлов HDF5, содержащих структуру с узлами и возможностью хранить несколько наборов данных.
Библиотека разработана на C, но предусматривает интерфейсы для других языков: Python, MATLAB и Java. Она особенно эффективна при сохранении больших объемов данных. В сравнении с остальными форматами, работающими в бинарном виде, HDF5 поддерживает сжатие в реальном времени, используя преимущества повторяющихся паттернов в структуре для уменьшения размера файла.
Возможные варианты в Python — это PyTables и h5py . Они отличаются по нескольким аспектам, а выбирать их стоит, основываясь на том, что нужно программисту.
h5py предоставляет прямой интерфейс с высокоуровневыми API HDF5, а PyTables скрывает за абстракциями многие детали HDF5 с более гибкими контейнерами данных, индексированные таблицы, запросы и другие способы вычислений.
В pandas есть классовый dict под названием HDFStore , который использует PyTables для хранения объектов pandas. Поэтому перед началом работы с форматом необходимо импортировать класс HDFStore :
Теперь данные объекта Dataframe можно хранить в файле с расширением .h5 . Для начала создадим Dataframe .
Дальше нужен файл HDF5 под названием mydata.h5 . Добавим в него содержимое объекта Dataframe .
Можете догадаться, как хранить несколько структур данных в одном файле HDF5, указав для каждой из них метку. С помощью этого формата можно хранить несколько структур данных в одном файле, при том что он будет представлен переменной store .
Обратный процесс также прост. Учитывая наличие файла HDF5 с разными структурами данных вызвать их можно следующим путем.
Взаимодействие с базами данных
В большинстве приложений текстовые файлы редко выступают источниками данных, просто потому что это не эффективно. Они хранятся в реляционных базах данных (SQL) или альтернативных (NoSQL), которые стали особо популярными в последнее время.
Загрузка из SQL в Dataframe — это простой процесс, а pandas предлагает дополнительные функции для еще большего упрощения.
Модуль pandas.io.sql предоставляет объединенный интерфейс, независимый от базы данных, под названием sqlalchemy . Он упрощает режим соединения, поскольку команды неизменны вне зависимости от типа базы. Для создания соединения используется функция create_engine() . Это же позволяет настроить все необходимые свойства: ввести имя пользователя, пароль и порт, а также создать экземпляр базы данных.
Вот список разных типов баз данных:
Загрузка и запись данных с SQLite3
Для первого примера используем базу данных SQLite, применив встроенный Python sqlite3 . SQLite3 — это инструмент, реализующий реляционную базу данных очень простым путем. Это самый легкий способ добавить ее в любое приложение на Python. С помощью SQLite фактически можно создать встроенную базу данных в одном файле.
Идеальный вариант для тех, кому нужна база, но нет желания устанавливать реальную. SQLite3 же можно использовать для тренировки или для использования функций базы при сборе данных, не выходя за рамки программы.
Создадим объект Dataframe , который будет использоваться для создания новой таблицы в базе данных SQLite3.
white | red | blue | black | green | |
---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 | 9 |
2 | 10 | 11 | 12 | 13 | 14 |
3 | 15 | 16 | 17 | 18 | 19 |
Теперь нужно реализовать соединение с базой.
Конвертируем объект в таблицу внутри базы данных.
А вот для чтения базы нужно использовать функцию read_sql() , указав название таблицы и движок.
index | white | red | blue | black | green | |
---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 2 | 3 | 4 |
1 | 1 | 5 | 6 | 7 | 8 | 9 |
2 | 2 | 10 | 11 | 12 | 13 | 14 |
3 | 3 | 15 | 16 | 17 | 18 | 19 |
На примере видно, что даже в этом случае процесс записи очень прост благодаря API библиотеки pandas.
Однако того же можно добиться и без них. Это покажет, почему pandas считается эффективным инструментом для работы с базой данных.
Во-первых, нужно установить соединение и создать таблицу, определив правильные типы данных, которые впоследствии будут загружаться.
Теперь можно добавлять сами данные с помощью SQL INSERT .
Наконец, можно перейти к запросам из базы данных. Это делается с помощью SQL SELECT .
Конструктору Dataframe можно передать список кортежей, а если нужны названия колонок, то их можно найти в атрибуте description своего cursor .
Этот подход куда сложнее.
Загрузка и запись с помощью PostgreSQL
Начиная с pandas 0.14, PostgreSQL также поддерживается. Для начала нужно проверить версию библиотеки.
Для запуска примера база PostgreSQL должна быть установлена в системе. В этом примере была создана база postgres , где пользователя зовут postgres , а пароль — password . Замените значения на соответствующие в вашей системе.
Сначала нужно установить библиотеку psycopg2 , которая предназначена для управления соединениями с базой данных.
Или с помощью PyPl:
Теперь можно установить соединение:
Примечание. В этом примере вне зависимости от установленной версии в Windows может возникать ошибка:
Это почти наверняка значит, что DLL для PostgreSQL (в частности, libpq.dll) не установлены в PATH. Добавьте одну из папок postgres\x.x\bin в PATH и теперь соединение Python с базой данных PostgreSQL должно работать без проблем.
Создайте объект Dataframe:
Вот как просто переносить данные в таблицу. С помощью to_sql() вы без проблем запишите их в таблицу dataframe .
pgAdmin III — это графическое приложение для управления базами данных PostgreSQL. Крайне удобный инструмент для Windows и Linux. С его помощью можно легко изучить созданную базу данных.
Если вы хорошо знаете язык SQL, то есть и классический способ рассмотреть созданную таблицу с помощью сессии psql .
В этом случае соединение произошло от имени пользователя postgres . Оно может отличаться. После соединения просто осуществите SQL-запрос к таблице.
Даже конвертация таблицы в объект Dataframe — тривиальная задача. Для этого есть функция read_sql_table() , которая считывает данные из таблицы и записывает их в новый объект.
Но когда нужно считать данные из базы, конвертация целой таблицы в Dataframe — не самая полезная операция. Те, кто работают с реляционными базами данных, предпочитают использовать для этих целей SQL. Он подходит для выбора того. какие данные и в каком виде требуется получить с помощью SQL-запроса.
Текст запроса может быть использован в функции read_sql_query() .
Чтение и запись данных в базу данных NoSQL: MongoDB
Среди всех баз данных NoSQL (BerkeleyDB, Tokyo Cabinet и MongoDB) MongoDB — одна из самых распространенных. Она доступна в разных системах и подходит для чтения и записи данных при анализе данных.
Работу нужно начать с того, что указать на конкретную директорию.
Теперь, когда сервис случает порт 27017, к базе можно подключиться, используя официальный драйвер для MongoDB, pymongo .
Один экземпляр MongoDB способен поддерживать несколько баз данных одновременно. Поэтому нужно указать на конкретную.
Когда база данных определена, нужно определить коллекцию. Она представляет собой группу документов, сохраненных в MongoDB. Ее можно воспринимать как эквивалент таблиц из SQL.
Теперь нужно добавить данные в коллекцию. Создайте Dataframe .
white | red | blue | black | green | |
---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 | 9 |
2 | 10 | 11 | 12 | 13 | 14 |
3 | 15 | 16 | 17 | 18 | 19 |
Перед добавлением его нужно конвертировать в формат JSON. Процесс конвертации не такой простой, потому что нужно задать данные, которые будут записаны в базу, чтобы потом с легкостью извлекать их снова в объекте.
Теперь все готово для добавления документа в коллекцию. Для этого используется функция insert() .
В этом случае каждый объект представлен на отдельной строке. Когда данные загружены в документ базы данных, можно выполнить и обратный процесс, то есть, прочитать данные и конвертировать их в Dataframe .
Цель этого руководства — продемонстрировать принципы разработки приложений на Python с использованием базы данных SQLite.
Подключение к SQLite в Python
В этом разделе разберем, как создавать базу данных SQLite и подключаться к ней в Python с помощью модуля sqlite3.
Для установки соединения нужно указать название базы данных, к которой требуется подключиться. Если указать название той, что уже есть на диске, то произойдет подключение. Если же указать другое, то SQLite создаст новую базу данных.
Для подключения к SQLite нужно выполнить следующие шаги
- Использовать метод connect() из модуля sqlite3 и передать в качестве аргумента название базы данных.
- Создать объект cursor с помощью объекта соединения, который вернул прошлый метод для выполнения SQLite-запросов из Python.
- Закрыть объект cursor после завершения работы.
- Перехватить исключение базы данных, если в процессе подключения произошла ошибка.
Следующая программа создает файл базы данных sqlite_python.db и выводит подробности о версии SQLite.
Понимание SQLite-подключения в подробностях
- Эта строка импортирует в программу модуль sqlite3. С помощью классов и методов из этого модуля можно взаимодействовать с базой данных SQLite.
- С помощью метода connect() выполняется подключение к базе данных. Этот метод возвращает объект подключения SQLite.
- Объект connection не является потокобезопасным. Модуль sqlite3 не позволяет делиться подключением между потоками. Если попытаться сделать это, то можно получить исключение.
- Метод connect() принимает разные аргументы. В этом примере передается название базы данных.
- С помощью объекта соединения создается объект cursor , который позволяет выполнять SQLite-запросы из Python.
- Для одного соединения можно создать неограниченное количество cursor. Он также не является потокобезопасным. Модуль не позволяет делиться объектами cursor между потоками. Если это сделать, то будет ошибка.
После этого создается запрос для получения версии базы данных.
- С помощью метода execute объекта cursor можно выполнить запрос в базу данных из Python. Он принимает SQLite-запрос в качестве параметра и возвращает resultSet — то есть, строки базы данных
- Получить результат запроса из resultSet можно с помощью методов, например, fetchAll()
- В этом примере SELECT version(); выполняется для получения версии базы данных SQLite.
Блок try-except-finally: весь код расположен в блоке try-except, что позволит перехватить исключения и ошибки базы данных, которые могут появиться в процессе.
cursor.close() и connection.close()
- Хорошей практикой считается закрывать объекты connection и curosor после завершения работы, чтобы избежать проблем с базой данных.
Создание таблицы SQLite в Python
В этом разделе разберемся, как создавать таблицы в базе данных SQLite с помощью Python и модуля sqlite3. Создание таблицы — это DDL-запрос, выполняемый из Python.
В этом примере создадим базу sqlitedb_developers в базе данных sqlite_python.db .
Шаги для создания таблицы в SQLite с помощью Python:
- Соединиться с базой данных с помощью sqlite3.connect() . Речь об этом шла в первом разделе.
- Подготовить запрос создания таблицы.
- Выполнить запрос с помощью cursor.execute(query) .
- Закрыть соединение с базой и объектом cursor .
Типы данных SQLite и соответствие типам Python
Перед переходом к выполнению CRUD-операций в SQLite из Python сначала нужно разобраться с типами данных SQLite и соответствующими им типами данных в Python, которые помогают хранить и считывать данные из таблицы.
У движка SQLite есть несколько классов для хранения значений. Каждое значение, хранящееся в базе данных, имеет один из следующих типов или классов.
Типы данных SQLite:
- NULL — значение NULL
- INTEGER — числовые значения. Целые числа хранятся в 1, 2, 3, 4, 6 и 8 байтах в зависимости от величины
- REAL — числа с плавающей точкой, например, 3.14, число Пи
- TEXT — текстовые значения. Могут храниться в кодировке UTF-8, UTF-16BE или UTF-16LE
- BLOB — бинарные данные. Для хранения изображений и файлов
Следующие типы данных из Python без проблем конвертируются в SQLite. Для конвертации достаточно лишь запомнить эту таблицу.
Таблицы SQLite создаются за счет выполнения скрипта из Python. Вывод:
Примечание: после соединения с SQLite все содержимое файла сохраняется в переменной. Затем используется команда cursor.executescript(script) для выполнения всех инструкций за раз.
Исключения базы данных SQLite
- sqlite3.Warning . Подкласс Exception . Его можно игнорировать, если нужно, чтобы оно не останавливало выполнение.
- sqlite3.Error . Базовый класс для остальных исключений модуля sqlite3. Подкласс Exception .
- sqlite3.DatabaseError . Исключение, которое возвращается при ошибках базы данных. Например, если попытаться открыть файл как базу sqite3, хотя он ею не является, то вернется ошибка «sqlite3.DatabaseError: file is encrypted or is not a database».
- sqlite3.IntegrityError . Подкласс DatabaseError . Эта ошибка возвращается, когда затрагиваются отношения в базе, например, например, не проходит проверка внешнего ключа.
- sqlite3.ProgrammingError . Подкласс DatabaseError . Эта ошибка возникает из-за ошибок программиста: создание таблицы с именем, которое уже занято, синтаксическая ошибка в SQL-запросах.
- sqlite3.OperationalError . Подкласс DatabaseError . Эту ошибку невозможно контролировать. Она появляется в ситуациях, которые касаются работы базы данных, например, обрыв соединения, неработающий сервер, проблемы с источником данных и так далее.
- sqlite3.NotSupportedError . Это исключение появляется при попытке использовать неподдерживаемое базой данных API. Пример: вызов метода rollback() для соединения, которое не поддерживает транзакции. Вызов коммита после команды создания таблицы.
Например, попробуем добавить данные в таблицу, которой не существует и выведем весь стек исключений из Python.
Импортировать Excel в базу данных SQL Server с помощью Python
Обязательно установите xlrd
Поместите файл листа Excel по тому же пути, что и файл .py
Содержимое таблицы SC показано на рисунке.
обращать внимание
① "SC.xlsx" - это имя файла excel, и убедитесь, что файл таблицы excel помещен по тому же пути, что и файл .py, в противном случае будет сообщено об ошибке
②sheet - это имя таблицы в Excel, обычно по умолчанию Sheet1
③ Эта операция по удалению таблицы отправки предназначена для обеспечения того, чтобы каждый раз при импорте таблицы Excel содержимое таблицы отправки в базе данных было точно таким же, как содержимое импортируемой таблицы Excel каждый раз, и оно было таким же, как в предыдущей таблице отправки. Неактуально
Дай каштан,Запускаем программу два раза подряд, С двумя вышеупомянутыми строками впервые. Без второго раза,Запустить программу в последний разРезультаты выполнения следующие:
, а также следующие две строки кода
В таблице отправки результат после второго выполнения программы не будет "накопление”
Конечно, если вы импортируете его только один раз, Delete не имеет смысла, вы можете добавить его или нет.
④ Иногда в первой строке таблицы Excel указывается, что заголовок не является данными, но вы не хотите импортировать содержимое заголовка в базу данных в виде данных, например:
Решение - начать цикл for с 1 вместо 0:
Если первая строка Excel - это данные, которые необходимо импортировать в базу данных, просто позвольте циклу for начинаться с 0
Читайте также:
- Каково назначение диаграмм что такое легенда категория ряд данных в excel
- Не запускается программа сбербанк на телефоне пишет не удается загрузить
- Как установить mt65xx android phone драйвер
- Как отсканированный документ перевести в автокад
- Как можно изменить внешнее оформление слайда в программе microsoft powerpoint