Стандартные команды
Теперь давайте пройдёмся по списку стандартных команд sqlite3, которые предназначены для взаимодействия с базой данных. Стандартные команды могут быть классифицированы по трём группам:
- Язык описания данных DDL: команды для создания таблицы, изменения и удаления баз данных, таблиц и прочего.
-
- CREATE
- ALTER
- DROP
- Язык управления данными DML: позволяют пользователю манипулировать данными (добавлять/изменять/удалять).
-
- INSERT
- UPDATE
- DELETE
- Язык запросов DQL: позволяет осуществлять выборку данных.
Заметка: SQLite так же поддерживает и множество других команд, список которых можно найти тут. Поскольку данный урок предназначен для начинающих, мы ограничимся перечисленным набором команд.
Файлы баз данных SQLite являются кроссплатформенными. Они могут располагаться на различного рода устройствах.
Далее знакомство с sqlite3 будет осуществляться на базе данных, предназначенной для хранения комментариев. Для публикации комментария пользователю необходимо будет добавить следующие данные:
- Имя
- Сайт
- Комментарий
Из всех этих полей только адрес сайта может быть пустым. Так же можем ввести колонку для нумерации комментриев. Назовём её .
Теперь давайте определимся с типами данных для каждой из колонок:
Атрибут | Тип данных |
post_id | INTEGER |
name | TEXT |
TEXT | |
website_url | TEXT |
comment | TEXT |
Тут вы сможете найти все типы данных, поддерживаемые в SQLite3.
Так же следует отметить, в SQLite3 данные, вставляемые в колонку могут отличаться от указанного типа. В MySQL такое не пройдёт.
Теперь давайте создадим базу данных. Если вы ещё находитесь в интерфейсе sqlite3, то наберите команду для выхода. Теперь вводим:
В результате, в текущем каталоге у нас появится файл comment_section.db.
Заметка: если не указать название файла, sqlite3 создаст временную базу данных.
Создание таблицы
Для хранения комментариев нам необходимо создать таблицу. Назовём её . Выполняем команду:
CREATE TABLE comments ( post_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, website_url TEXT NULL, comment TEXT NOT NULL );
обеспечит уверенность, что ячейка не будет содержать пустое значение. и расширяют возможности поля post_id.
Чтобы убедиться в том, что таблица была создана, выполняем мета команду . В результате видим нашу таблицу .
Заметка: Для получения структуры таблицы наберите
Теперь можем внести данные в таблицу.
ВСТАВКА СТРОК
Предположим, что нам необходим внести следующую запись:
Name : Shivam Mamgain Email : [email protected] Website : shivammg.blogspot.com Comment : Great tutorial for beginners.
Для вставки воспользуемся командой INSERT.
INSERT INTO comments ( name, email, website_url, comment ) VALUES ( 'Shivam Mamgain', '[email protected]', 'shivammg.blogspot.com', 'Great tutorial for beginners.' );
Указывать значение для не нужно т.к. оно сформируется автоматически благодаря настройке .
Чтобы набить руку можете вставить ещё несколько строк.
ВЫБОРКА
Для выборки данных воспользуемся командой SELECT.
SELECT post_id, name, email, website_url, comment FROM comments;
Этот же запрос может выглядеть так:
SELECT * FROM comments;
В результате из таблицы будут извлечены все строки. Результат может выглядеть без разграничения по колонкам и без заголовка. Чтобы это исправить выполняем:
Для отображения шапки введите .
Для отображения колонок выполните команду .
Выполняем SELECT запрос ещё раз.
Заметка: вид отображения можно изменить, воспользовавшись мета командой .
UPDATE comments SET email = '[email protected]' WHERE name = 'Shivam Mamgain';
В результате запись будет изменена.
Для выполнения команды DELETE нужно так же указать условие.
К примеру нам необходимо удалить комментарий с post_id = 9. Выполняем команду:
DELETE FROM comments WHERE post_id = 9;
Для удаления комментариев пользователей ‘Bart Simpson’ и ‘Homer Simpson’ выполним:
DELETE FROM comments WHERE name = 'Bart Simpson' OR name = 'Homer Simpson';
ИЗМЕНЕНИ СТРУКТУРЫ
Для добавления новой колонки следует использовать команду ALTER. К примеру введём поле username. Выполняем команду:
ALTER TABLE comments ADD COLUMN username TEXT;
Данная команда создаст новое текстовое поле в таблице . Для всех сток в качестве значения будет выставлено NULL.
Так же мы можем использовать команду ALTER для переименования таблицы на .
ALTER TABLE comments RENAME TO Coms;
1.0. Классы хранения и типы данных
Каждое значение, хранящееся в базе данных SQLite (или обрабатываемое движком), имеет один из следующих классов хранения:
- NULL. Пустое значение в таблице базы.
- INTEGER. Целочисленное значение, хранящееся в 1, 2, 3, 4, 6 или 8 байтах, в зависимости от величины самого значения.
- REAL. Числовое значение с плавающей точкой. Хранится в формате 8-байтного числа IEEE с плавающей точкой.
- TEXT. Значение строки текста. Хранится с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
- BLOB. Значение бинарных данных, хранящихся точно в том же виде, в каком были введены.
Отметим, что класс хранения — более широкое понятие, чем тип данных. К примеру, класс хранения INTEGER включает 6 различных типов целочисленных данных различной длины. На диске это записывается по-разному. Но как только целочисленные значения считываются с диска и поступают для обработки в оперативную память, они преобразуются в наиболее общий тип данных (8-байтное целое число). Следовательно, хранение по системе класса данных в практическом плане неотличимо от хранения по типу данных, и они могут быть взаимозаменяемыми.
Любой столбец базы данных SQLite версии 3, за исключением столбцов , может быть использован для хранения значений любого класса.
Все значения в инструкциях SQL, являются ли они литералами или параметрами, встроенными в строку SQL-запроса в случае прекомпилируемых инструкций SQL, имеют неявный класс хранения. В условиях, описанных ниже, движок базы данных может конвертировать значения между числовыми классами хранения (INTEGER и REAL) и TEXT во время выполнения запроса.
1.1. Логические типы данных
SQLite не имеет отдельного логического класса хранения. Вместо этого, логические значения хранятся как целые числа 0 (false) и 1 (true).
1.2 Типы данных даты и времени
SQLite не имеют классов, предназначенных для хранения дат и/или времени. Вместо этого, встроенные функции даты и времени в SQLite способны работать с датами и временем, сохраненными в виде значений TEXT, REAL и INTEGER в следующих форматах:
- TEXT как строка формата ISO8601 («»).
- REAL как числа юлианского календаря. То есть число дней с полудня 24 ноября 4714 г. до н.э. по Гринвичу в соответствии с ранним григорианским календарём.
- INTEGER как время Unix, — количество секунд с 1970-01-01 00:00:00 UTC.
В приложениях следует выбирать, в каком из этих форматов хранить даты и время, а затем можно свободно конвертировать из одного формата в другой с помощью встроенных функций даты и времени.
3 ответа
5
Лучший ответ
Если вам не требуется соединение между этими таблицами, вы можете вручную разбить БД и сказать, в каких таблицах находится DB (= файл).
Я не думаю, что можно позволить SQLite разделить вашу БД в нескольких файлах, потому что вы подключаетесь к БД, сообщая имя файла.
23 фев. 2012, в 10:58
Поделиться
10
Вопрос около трех лет, но я приземлился здесь, когда искал тот же вопрос. Позднее я узнал, что это возможно:
Использование
sqlite3.exe MainDB.db
Доступ к таблице из другого файла базы данных
Вы можете даже присоединиться к нескольким файлам
tameera сказал, что существует ограничение в 62 прикрепленных базах данных, но я никогда не попадал в этот предел, поэтому я не могу подтвердить это.
Большим преимуществом, помимо некоторых особых случаев, является то, что вы ограничиваете фрагментацию в файлах базы данных, и вы можете использовать команду VACUUM отдельно для каждой таблицы!
30 нояб. 2015, в 09:48
Поделиться
2
Файлы базы данных SQLite могут расти довольно большими без каких-либо штрафных санкций.
То, что может ухудшить производительность:
- нарушение блокировки файлов
- размер таблицы (при использовании индексов и выдаче запросов на запись)
Кроме того, по умолчанию SQLite ограничивает количество подключенных баз данных до 10.
В любом случае попробуйте разбить свои таблицы. Вы увидите, что SQLite может сильно расти таким образом.
18 окт. 2013, в 12:01
Поделиться
Ещё вопросы
- 1Проблема с логическим выражением со строковым значением из последнего
- 1Android: сохранить изображения в определенную папку на SD-карте
- 1Сериализуемый и экстернализуемый. Разница в вызове конструктора при десериализации
- 1Фабрика классов Python… или?
- 1Установить свойство переменной из объекта в PHP
- 1Есть ли лучший способ преобразовать массив строк в массив целых чисел?
- Присоединяйтесь к таблицам MySQL для отображения количества
- Fancybox-фон меняется, когда активен
- 1Как преобразовать массив T [] в V [], когда V является объектом атрибута в T
- Юникод «в курсе» std :: getline
- 1Использование методов внутри циклов, Java и Android
- Получение элементов на том же уровне, что и отмеченное поле ввода
- Мультивыбор JQuery не показывает проверку Qtip
- удалить управляемый объект c ++ / cli
- 2Проверка на ноль, что лучше? «Ноль ==» или «== ноль»
- 1Завершить длительный процесс _и_ получить стандартный вывод в Java
- 2наследование protobuf-net: производный класс скрывает свойство базового класса
- Подключение андроид приложения к MySQL через SQL server express
- 2SACL на Сервисах, использующих C # || получить дескриптор службы, которая имеет права ACCESS_SYSTEM_SECURITY, используя C #
- ng-init не инициализирует мою выбранную модель
- Правильный подход к использованию связанных таблиц и возможные обходные пути?
- 1Каков наилучший подход для инкапсуляции нескольких вызовов методов?
- 1Как вы заставляете субплоты Python иметь одинаковую ширину и разную высоту (gridspec не работает)?
- Выборочный мышиный центр / mousedown в jQuery
- Могу ли я использовать reinterpret_cast здесь?
- 1Изменить целое число в сервисе из действия
- 1Как я могу настроить lxml и pypy на Yosemite?
- 1как перейти к другому макету в той же вкладке, используя фрагмент
- JQuery Обход с .not
- 1Заполните одну форму данными из другой в Java (Netbeans)
- 1Python — как убрать последнюю запятую (,) в строке json
- 1MySql Group By и сумма общего значения другого столбца, а затем отображение в PHP MySQLi Fetch Array
- СОЮЗ неожиданные результаты?
- Как считать записи из двух разных таблиц в MySQL
- 1Как проверить, можно ли удалить файл?
- 1Джексон обновить часть объекта
- Ионная CSS анимация не работает на устройстве
- 1JavaScript / не знаю, как использовать переменную
- AngularJS — Как скопировать ссылку в буфер обмена?
- Функция COUNT CASE для диапазона дат
- условная функция с возможными пустыми входящими полями
- Как создать адаптивную веб-страницу с помощью angularJS?
- substring_index не принимает точный префикс
- Div с несколькими цветными наложениями при наведении
- Анимация div вниз и вверх с помощью Jquery на клике
- Расчет десятичного числа для типа данных ВРЕМЯ
- 1Веб-страница браузера Android одноразовый вход
- Получить общее количество посетителей на сайт PHP MYSQL
- 1сохранение веб-страниц в Android
- Найти максимальные записи даты для всех USER_IDs группы
Что такое база данных в SQL
SQL-запросы обращаются к данным в виде таблиц, то есть к реляционным базам данных. Упрощенный вариант такой базы — это таблицы Excel, в которых информация также упорядочена в столбцы и строки.
Основные понятия реляционной модели:
1. Отношение — это сама таблица, она двумерная и состоит из столбцов и строк.
2. Атрибут — столбец в таблице, который содержит один конкретный параметр: название, тип, дату, стоимость или другую характеристику.
3. Домен — это допустимые значения для каждого атрибута. Например, в столбце «Имя» или «Название» значения должны представлять собой набор буквенных символов, но они не могут начинаться с «ь» или «ъ» и не могут быть записаны числами.
4. Кортеж (строка или запись) — это табличная строка с порядковым номером, в которой содержится информация об одном конкретном объекте.
5. Значение — элемент таблицы, который находится на пересечении столбцов и строк.
6. Ключ — это самый важный столбец в таблице, за счет этих значений и происходит взаимодействие в реляционной базе данных, он связывает таблицы между собой.
Ключи бывают нескольких видов:
- Первичный ключ — идентификатор, такой как индекс или артикул.
- Потенциальный ключ — другое уникальное значение, которое может служить идентификатором.
- Внешний ключ — столбец-ссылка, используется для объединения двух таблиц, каждое значение внешнего ключа обязательно соответствует первичному ключу в другой таблице.
Например, для решения задачи — выбрать все пиццерии, которые смогут доставить пиццу с ананасами после 23:00, — кроме основной таблицы с графиками работы понадобятся также таблицы с ассортиментом каждого заведения, а также таблицы с составом каждой пиццы (чтобы понять, есть ли в ней ананасы). Все эти таблицы будут связаны между собой с помощью ключей.
Список пиццерий в городе
Ассортимент одной из пиццерий с ключом id — 1
Объекты репликации
Максимальные размеры и количества для различных объектов, определяемых в компонентах репликации SQL Server .
SQL Server Объект Replication | Максимальные размеры и количества для SQL Server (64-разрядная версия) |
---|---|
Статей (публикация слиянием) | 2048 |
Статей (моментальный снимок или публикация транзакций) | 32 767 |
Столбцов в таблице* (публикация слиянием) | 246 |
Столбцов в таблице** (моментальный снимок или публикация транзакций SQL Server) | 1000 |
Столбцов в таблице** (моментальный снимок или публикация транзакций Oracle) | 995 |
Байтов на столбец, используемый в фильтре строк (публикация слиянием) | 1024 |
Байтов на столбец, используемый в фильтре строк (моментальный снимок или публикация транзакций) | 8000 |
* Если для обнаружения конфликтов применяется трассировка на уровне строк (по умолчанию), базовая таблица может содержать не более 1024 столбцов, однако столбцы из статьи должны быть отфильтрованы, чтобы было опубликовано не более 246 столбцов. Если применяется трассировка на уровне столбцов, базовая таблица может содержать не более 246 столбцов.
** Базовая таблица может включать максимальное количество столбцов, разрешенное в базе данных публикации (1024 для SQL Server), но столбцы должны быть отфильтрованы из статьи, если они превышают максимальное количество, заданное для данного типа публикации.
3.3.Близость к столбцу для просмотров и подзапросов
«Столбцы» подзапроса VIEW или FROM-clause на самом деле являются выражениями в результирующем наборе оператора SELECT , реализующего VIEW или подзапрос. Таким образом, сродство столбцов в представлении или подзапросе определяется правилами сродства выражений, приведенными выше. Рассмотрим пример:
CREATE TABLE t1(a INT, b TEXT, c REAL); CREATE VIEW v1(x,y,z) AS SELECT b, a+c, 42 FROM t1 WHERE b!=11;
Сродство колонки v1.x будет таким же,как и сродство t1.b (TEXT),так как v1.x отображает непосредственно в t1.b.Но колонки v1.y и v1.z обе не имеют сродства,так как эти колонки отображают в выражение a+c и 42,а выражения всегда не имеют сродства.
Когда оператор SELECT , реализующий подзапрос VIEW или FROM-clause, является тогда сродство каждого предполагаемого столбца VIEW или подзапроса будет сродством соответствующего столбца результатов для одного из отдельных операторов SELECT, составляющих соединение. Однако неизвестно, какой из операторов SELECT будет использоваться для определения сродства. Различные составные операторы SELECT могут использоваться для определения сходства в разное время во время оценки запроса. Выбор может варьироваться в зависимости от версии SQLite. Выбор может меняться между одним запросом и другим в одной и той же версии SQLite. Выбор может быть различным в разное время в рамках одного и того же запроса. Следовательно, вы никогда не можете быть уверены, какое сродство будет использоваться для столбцов составного SELECT, которые имеют различное сродство в составляющих подзапросах.Лучше всего избегать смешивания аффинностей в составном SELECT, если вам важен тип данных результата.
4.3.Пример сравнения
CREATE TABLE t1( a TEXT, b NUMERIC, c BLOB, d ); INSERT INTO t1 VALUES('500', '500', '500', 500); SELECT typeof(a), typeof(b), typeof(c), typeof(d) FROM t1; text|integer|text|integer SELECT a < 40, a < 60, a < 600 FROM t1; |1|1 SELECT a < '40', a < '60', a < '600' FROM t1; |1|1 SELECT b < 40, b < 60, b < 600 FROM t1; ||1 SELECT b < '40', b < '60', b < '600' FROM t1; ||1 SELECT c < 40, c < 60, c < 600 FROM t1; || SELECT c < '40', c < '60', c < '600' FROM t1; |1|1 SELECT d < 40, d < 60, d < 600 FROM t1; ||1 SELECT d < '40', d < '60', d < '600' FROM t1; 1|1|1
Все результаты в примере будут такими же, если сравнения заменены — если выражения вида «a <40» переписаны как «40> a».
5.Операторы
Математические операторы (+, -, *, /,%, <<, >>, & и |) интерпретируют оба операнда, как если бы они были числами. Операнды STRING или BLOB автоматически преобразуются в значения REAL или INTEGER. Если СТРОКА или BLOB выглядит как вещественное число (если оно имеет десятичную точку или показатель степени) или если значение выходит за пределы диапазона, который может быть представлен как 64-битное целое число со знаком, то оно преобразуется в REAL. В противном случае операнд преобразуется в INTEGER. Подразумеваемое преобразование типов математических операндов немного отличается от в этой строке, а значения BLOB, которые выглядят как действительные числа, но не имеют дробной части, сохраняются как REAL вместо преобразования в INTEGER, как это было бы для . Преобразование из STRING или BLOB в REAL или INTEGER выполняется, даже если оно необратимо и с потерями. Некоторые математические операторы (%, <<, >>, & и |) ожидают операнды INTEGER. Для этих операторов операнды REAL преобразуются в INTEGER так же, как . <<, >>, & и | операторы всегда возвращают результат INTEGER (или NULL), но оператор% возвращает INTEGER или REAL (или NULL) в зависимости от типа его операндов. Операнд NULL в математическом операторе дает результат NULL. Операнд математического оператора, который никоим образом не выглядит числовым и не имеет значения NULL, преобразуется в 0 или 0,0. Деление на ноль дает результат NULL.
6.Сортировка,группировка и подборка соединений
Когда результаты запроса сортируются по пункту ORDER BY,сначала идут значения с классом хранения NULL,затем значения INTEGER и REAL,перемежающиеся в числовом порядке,затем значения TEXT в порядке объединения последовательностей,и,наконец,BLOB-значения в порядке memcmp().Перед сортировкой не происходит никакого преобразования классов хранения.
При группировке значений с пунктом GROUP BY значения с разными классами хранения считаются разными,за исключением значений INTEGER и REAL,которые считаются равными,если они численно равны.К каким-либо значениям в результате пункта GROUP BY не применяется никакого сходства.
Комбинированные операторы SELECT UNION,INTERSECT и EXCEPT выполняют неявное сравнение значений.К операндам сравнения для неявных сравнений,связанных с UNION,INTERSECT или EXCEPT,не применяется никакого сродства-значения сравниваются как есть.
7.Сбор последовательностей
Когда SQLite сравнивает две строки,он использует коллекционную последовательность или коллекционную функцию (два слова для одного и того же),чтобы определить,какая строка больше или равны ли две строки.В SQLite есть три встроенные функции коллатинга:BINARY,NOCASE и RTRIM.
ДВОИЧНЫЙ — сравнивает строковые данные с помощью memcmp () независимо от кодировки текста.
NOCASE — похож на двоичный, за исключением того, что для сравнения используется sqlite3_strnicmp () . Следовательно, 26 символов в верхнем регистре ASCII преобразуются в их эквиваленты в нижнем регистре перед выполнением сравнения
Обратите внимание, что регистр вводится только для символов ASCII. SQLite не пытается выполнить полное сворачивание регистра UTF из-за размера требуемых таблиц
Также обратите внимание, что любые символы U + 0000 в строке считаются признаками конца строки для целей сравнения.
RTRIM — то же, что и двоичный, за исключением того, что символы пробела в конце игнорируются.
Приложение может зарегистрировать дополнительные функции сопоставления с помощью интерфейса sqlite3_create_collation () .
Функции свертки имеют значение только при сравнении строковых значений.Числовые значения всегда сравниваются численно,а BLOB-файлы всегда сравниваются побайтно с помощью memcmp().
Как начать работу с SQL
Для начала работы с SQL достаточно разбираться в основах Excel, чтобы понимать принцип работы запросов, а также иметь базовый уровень английского на уровне A1-A2. Эти навыки необходимы, чтобы понимать синтаксис SQL:
- SELECT — выбери данные
- FROM — вот отсюда
- JOIN — добавь еще эти таблицы
- WHERE — при таком условии
- GROUP BY — сгруппируй данные по этому признаку
- ORDER BY — отсортируй данные по этому признаку
- LIMIT — нужно такое количество результатов
- ; — конец предложения
Системы для работы с SQL имеют схожую структуру: есть редактор запросов, результат запросов и список таблиц, которые используются для обработки.
Самостоятельно начать изучение SQL можно с просмотра уроков на YouTube и чтения тематических статей в профильных медиа. Для более системного усвоения информации и экономии времени, потраченного на обучение, лучше записаться на курсы к опытным преподавателям, где вы сразу попадете в профессиональное сообщество и будете получать поддержку менторов.
Как создавать базу данных и вставлять различные данные
Создание базы данных в SQLite – это очень просто, но процесс требует того, чтобы вы немного разбирались в том, что такое SQL. Давайте взглянем на код, который создаст базу данных для хранения музыкальных альбомов:
Python
import sqlite3
conn = sqlite3.connect(«mydatabase.db») # или :memory: чтобы сохранить в RAM
cursor = conn.cursor()
# Создание таблицы
cursor.execute(«»»CREATE TABLE albums
(title text, artist text, release_date text,
publisher text, media_type text)
«»»)
1 2 3 4 5 6 7 8 9 10 |
importsqlite3 conn=sqlite3.connect(«mydatabase.db»)# или :memory: чтобы сохранить в RAM cursor=conn.cursor() cursor.execute(«»»CREATE TABLE albums (title text, artist text, release_date text, «»») |
Сначала нам нужно импортировать модуль sqlite3 и создать связь с базой данных. Вы можете передать название файла или просто использовать специальную строку “:memory:” для создания базы данных в памяти. В нашем случае, мы создаем его на диске в файле под названием mydatabase.db.
Далее мы создаем объект cursor, который позволяет нам взаимодействовать с базой данных и добавлять записи, помимо всего прочего. Здесь мы используем синтаксис SQL для создания таблицы под названием альбомы с пятью следующими полями: title, artist, release_date, publisher и media_type. SQLite поддерживает только пять типов данных: null, integer, real, text и blob. Давайте напишем этот код и вставим кое-какие данные в нашей новой таблице. Запомните, если вы запускаете команду CREATE TABLE, при этом база данных уже существует, вы получите сообщение об ошибке.
Python
# Вставляем данные в таблицу
cursor.execute(«»»INSERT INTO albums
VALUES (‘Glow’, ‘Andy Hunter’, ‘7/24/2012’,
‘Xplore Records’, ‘MP3’)»»»
)
# Сохраняем изменения
conn.commit()
# Вставляем множество данных в таблицу используя безопасный метод «?»
albums = [(‘Exodus’, ‘Andy Hunter’, ‘7/9/2002’, ‘Sparrow Records’, ‘CD’),
(‘Until We Have Faces’, ‘Red’, ‘2/1/2011’, ‘Essential Records’, ‘CD’),
(‘The End is Where We Begin’, ‘Thousand Foot Krutch’, ‘4/17/2012’, ‘TFKmusic’, ‘CD’),
(‘The Good Life’, ‘Trip Lee’, ‘4/10/2012’, ‘Reach Records’, ‘CD’)]
cursor.executemany(«INSERT INTO albums VALUES (?,?,?,?,?)», albums)
conn.commit()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Вставляем данные в таблицу cursor.execute(«»»INSERT INTO albums VALUES (‘Glow’, ‘Andy Hunter’, ‘7/24/2012’, ) conn.commit() albums=(‘Exodus’,’Andy Hunter’,’7/9/2002′,’Sparrow Records’,’CD’), (‘Until We Have Faces’,’Red’,’2/1/2011′,’Essential Records’,’CD’), (‘The End is Where We Begin’,’Thousand Foot Krutch’,’4/17/2012′,’TFKmusic’,’CD’), (‘The Good Life’,’Trip Lee’,’4/10/2012′,’Reach Records’,’CD’) cursor.executemany(«INSERT INTO albums VALUES (?,?,?,?,?)»,albums) conn.commit() |
Здесь мы использовали команду INSERT INTO SQL чтобы вставить запись в нашу базу данных
Обратите внимание на то, что каждый объект находится в одинарных кавычках. Это может усложнить работу, если вам нужно вставить строчки, которые содержат одинарные кавычки
В любом случае, чтобы сохранить запись в базе данных, нам нужно создать её. Следующая часть кода показывает, как добавить несколько записей за раз при помощи метода курсора executemany. Обратите внимание на то, что мы используем знаки вопроса (?), вместо строк замещения (%) чтобы вставить значения. Обратите внимание, что использование строки замещения не безопасно, так как может стать причиной появления атаки инъекций SQL . Использование знака вопроса намного лучше, а использование SQLAlchemy тем более, так как он делаете все необходимое, чтобы уберечь вас от правки встроенных одинарных кавычек на то, что SQLite в состоянии принимать.
Архитектура
Движок БД представляет библиотеку, с которой программа компонуется и SQLite становится составной частью программы. Вся БД хранится в единственном стандартном файле на машине, на которой исполняется программа.
Несколько процессов или потоков могут одновременно без каких-либо проблем читать данные из одной базы. Запись в базу можно осуществить только в том случае, если никаких других запросов в данный момент не обслуживается; в противном случае попытка записи оканчивается неудачей, и в программу возвращается код ошибки. Другим вариантом развития событий является автоматическое повторение попыток записи в течение заданного интервала времени.