SQLite
ORDER BY price DESC;
JOIN дає можливість об’єднувати інформаційні дані з кількох таблиць. SQLite зберігає всю базу в одному файлі. SQLite зручна як проміжна база для очищення даних, мапінгу, логів помилок, контрольних сум і підготовки файлів для завантаження в ERP. Питання CREATE TABLE products (
Чи підтримує SQLite транзакції?
Усе це зберігається не на окремому сервері, а у файлі company.db. Невелика утиліта для імпорту прайсу постачальника. # Завантажує Excel-файл. Ключові поля Поширені помилки:
Коли потрібні індекси
FROM orders == SQLite для тестування == * створювати правильні індекси; * не робити зайві запити; * використовувати транзакції для пакетного запису; * не тримати транзакції відкритими довго; * обмежувати розмір результату; * використовувати WHERE; * не завантажувати все одразу; * перевіряти план запиту; * використовувати WAL там, де доречно. * список товарів; * штрихкоди; * комірки; * задача на відбір; * фактичні сканування; * помилки; * статус синхронізації.== SQLite у десктопних програмах == Під час міграції потрібно завантажити контрагента, договори й відкриті залишки. У десктопних програмах SQLite зручна для: stock_qty REAL [[Категорія:ORM]]
CREATE TABLE api_messages ( |- | INTEGER | Цілі числа | 100 |- | REAL | Числа з дробовою частиною | 1250.75 |- | TEXT | Текст | ТОВ “компанія-користувач” |- | BLOB | Бінарні інформаційні дані | файл або зображення |- | NULL | Відсутність значення | порожнє поле |}
Потрібно визначити:
level TEXT NOT NULL,
Приклад:
cursor.execute("SELECT * FROM customers WHERE name = ?", (name,)) Практичні варіанти: Менеджер функціонує в мобільному застосунку без інтернету. FROM customers
);
- не зберігати зовнішні ID;
- не рахувати контрольні суми;
- не логувати помилки;
- не робити таблиці мапінгу;
- не фіксувати джерело даних;
- не перевіряти дублікати;
- не зберігати версію вивантаження;
- не відокремлювати сирі інформаційні дані від очищених;
- не робити повторюваний бізнес-процес завантаження;
- не документувати структуру проміжної бази.
<pre> SQLite не виступає як найкращим вибором, якщо: ! object_name Приклад: SQLite можна використовувати для локальної аналітики над файлами. Призначення <pre> target_amount REAL, |- | 001 | Створено таблицю customers |- | 002 | Додано таблицю orders |- | 003 | Додано status до orders |- | 004 | Додано індекс external_order_id |} == SQLite і ORM == <pre> <pre> Кращий підхід: * Customer → customers; * Product → products; * Order → orders; * Payment → payments; * MigrationLog → migration_logs. message WHERE active = 1 Приклад: == Зовнішній ключ == Типові обмеження: Це допоможе не створити дублікат одного й того самого замовлення. # Створити договори.
status TEXT,
Основні типи: |- | info | Завантажено 240 замовлень із сайту | 2026-05-15 10:00 |- | warning | 12 товарів не знайдено по артикулу | 2026-05-15 10:01 |- | error | Помилка авторизації API | 2026-05-15 10:05 |}
Пов’язані сторінки
"customer": "ТОВ клієнт ERP Плюс",
cursor = conn.cursor()
- імпортувати CSV;
- створити таблиці;
- зробити JOIN;
- порахувати підсумки;
- знайти дублікати;
- сформувати контрольний звіт;
- експортувати результат. Це означає, що customer_id у замовленні має відповідати існуючому клієнту. Без додаткових заходів його можна скопіювати. HAVING COUNT(*) > 1;
Приклад зв’язку клієнтів і замовлень
SQLite і документація схеми
|- | petrenko | update | order | ORD-000145 |- | api_site | create | order | WEB-10425 |}
Для підтримки критично документувати:
Але для великого вебсайту з багатьма одночасними записами частіше обирають серверну СУБД. Таблиця SELECT customer_id, SUM(total_amount) AS total_sales Для великої багатокористувацької ERP це важливе обмеження. * оперативно створити базу; * не потрібен сервер; * швидко очистити інформаційні дані; * можна запускати тести локально; * інтуїтивно перевіряти моделі; * швидко створювати тимчасові таблиці. SQLite має гнучку систему типів. active error_message TEXT NOT NULL, ); [[Категорія:Впровадження ERP]] Обмеження допомагають зберігати якість даних. CREATE INDEX idx_products_sku == SQLite і резервні копії == <pre> * SQL-міграції; * схему бази; * тестові seed-дані; * документацію; * скрипти створення.== SQLite у навчанні SQL == Іноді можна отримати помилку, що база заблокована. через UNIQUE по ''external_order_id'' одне замовлення не завантажиться двічі. !== Основні функції ERP SQLite == SELECT name, price ! ROLLBACK; == SQLite і JSON == id INTEGER PRIMARY KEY, ! '''критично.''' SQLite добре підходить для локальних, вбудованих і помірних задач, але не варто використовувати її як основну базу великої ERP з багатьма одночасними користувачами, складними правами доступу, великими транзакціями та високим навантаженням на запис.
conn = sqlite3.connect("company.db")
Типові помилки при міграції через SQLite
object_type TEXT,
customer = Customer(
SELECT id, name, email Оскільки SQLite — файлова база, резервну копію можна зробити копіюванням файлу. source_count
! Робота через мережеву папку здатна створювати ризики:
Пов’язана сторінка: Power BI FROM supplier_prices
Результат: Так. Ризик ORM дає можливість працювати з таблицями SQLite як із моделями. У такій таблиці можна зберігати номенклатуру:
CREATE TRIGGER log_product_price_update 100050 ! Навіть у SQLite потрібно:
source_count INTEGER,
* таблиці; * SQL-запити; * індекси; * первинні ключі; * зовнішні ключі; * транзакції; * представлення; * тригери; * JOIN; * агрегатні функції; * підзапити; * обмеження; * WAL-режим; * тимчасові таблиці; * вбудовані функції. Цей запит поверне активних клієнтів, відсортованих за назвою.
Команда VACUUM здатна перебудувати файл бази й звільнити невикористане місце.== SQLite і параметризовані запити ==
! active INTEGER DEFAULT 1
== Приклад таблиці зі зовнішнім ID ==
== Приклад структури SQLite для міграції ==
id INTEGER PRIMARY KEY,
<pre>
<pre>
<pre>
created_at TEXT NOT NULL
cursor.execute("INSERT INTO customers (name) VALUES (?)", ("ТОВ Альфа",))
WHERE supplier_sku IS NULL OR supplier_sku = '';
! SQLite здатна зберігати JSON як текст і в багатьох сценаріях працювати з JSON-даними. id INTEGER PRIMARY KEY,
SELECT * FROM customers LIMIT 10;
Приклад:
== SQLite і Node.js ==
У цю таблицю можна записувати помилки:
WAL часто корисний, коли: AFTER UPDATE OF price ON products CREATE TABLE orders (
Краще:
SQLite і продуктивність
- використовувати параметризовані запити;
- не склеювати SQL із введенням користувача;
- перевіряти інформаційні дані;
- обмежувати доступ до файлу бази;
- логувати помилки;
- не зберігати секрети у відкритому вигляді. Значення
Приклад SQLite у складському модулі
Це корисно для аналітики, звітів і контрольних сум. Тип
У Node.js SQLite здатна використовуватися для локальних застосунків, CLI-утиліт, Electron-додатків або тестів. Приклад
критично: id INTEGER PRIMARY KEY, CREATE TABLE customers ( ! ); * SELECT; * INSERT; * UPDATE; * DELETE; * CREATE TABLE; * ALTER TABLE; * DROP TABLE; * CREATE INDEX; * JOIN; * GROUP BY; * ORDER BY. Файл created_at TEXT NOT NULL SQLite часто використовують у мобільних застосунках, десктопних програмах, браузерах, IoT-пристроях, локальних кешах, тестових середовищах, невеликих сервісах, прототипах, аналітичних утилітах, міграційних інструментах і локальних модулях ERP. Перевага == SQLite і K2 ERP == Особливість SQLite у тому, що вона: Поверне товари від найдорожчого до найдешевшого. Можна створити таблицю: [[Категорія:Service Desk]] Для такого сценарію краще використовувати серверну СУБД, а SQLite залишити для локальних кешів, агентів або допоміжних інструментів.<pre> Для міграції краще мати окремі групи таблиць:
Приклад: FROM orders |
query = "SELECT * FROM customers WHERE name = '" + name + "'"
Коротко'''Первинний ключ''' ідентифікує кожен рядок таблиці. Сценарії: === Чи можна використовувати SQLite для міграції даних? === Транзакція — це група операцій, які мають виконатися разом.== UNIQUE == |
# Зберігає інформаційні дані у SQLite. PostgreSQL / MySQL / SQL Server
external_order_id TEXT UNIQUE, Це оптимізує не створювати двох контрагентів з однаковим ЄДРПОУ. # Записати контрольну суму. SELECT orders.number, orders.order_date, customers.name FROM active_customers; GROUP BY edrpou ); WHERE active = 1; WHERE sku = 'USB-C-1M-BLK'; SQLite і представленняТому права доступу зазвичай контролюються: |
|---|---|---|
| Зберігати файл у BLOB | Усе в одній базі | База оперативно росте |
| Зберігати файл окремо | Легше керувати файлами | Потрібно контролювати шляхи |
ORDER BY
SQLite і BLOB
! # Знайти дублікати. error_message
WAL — це Write-Ahead Logging, режим журналювання, який здатна покращити паралельне читання й запис у певних сценаріях. Приклад: SQLite зберігає локально: WHERE order_date >= '2026-05-01' Приклад: == SQLite і зовнішні ID == Коли інтернет з’являється, застосунок передає інформаційні дані в ERP. email TEXT, """) Приклад: додати поле статусу в замовлення. Для чутливих даних потрібні файлові права, шифрування, захист пристрою й контроль резервних копій. # Порахувати зміни цін.== GROUP BY == id INTEGER PRIMARY KEY, * raw_* — сирі інформаційні дані з джерела; * clean_* — очищені інформаційні дані; * map_* — таблиці відповідності; * err_* — помилки; * log_* — журнали; * ctl_* — контрольні суми; * export_* — фінальні інформаційні дані для завантаження. Рівні логів: |- | customers | Контрагенти | id, edrpou, name |- | products | Номенклатура | id, sku, name |- | orders | Замовлення | id, external_order_id, customer_id |- | migration_errors | Помилки міграції | object_type, object_id, error_message |} Приклад: продажі та реалізація по клієнтах. це легка вбудована реляційна база даних, яка зберігає всі інформаційні дані в одному файлі та не потребує окремого серверного процесу виступає ключовою рисою '''SQLite'''. unit як приклад: import sqlite3 == SQLite і очищення даних == <div style="border:3px solid #2e7d32; background:#e8f5e9; padding:14px; margin:16px 0;"> <pre> Поганий підхід: Структуру SQLite-бази можна змінювати через SQL. object_type TEXT NOT NULL, SQLite здатна використовуватися в інтеграційних агентах. Далі можна виконувати SQL-команди:Для важливих даних потрібно мати регулярні резервні копії.
conn.commit() !<pre> )
SQLite часто застосовується для разом з ORM.== JOIN у SQLite ==
WHERE sku = 'USB-C-1M-BLK';
DELETE FROM products
- локальний кеш мобільного модуля;
- проміжна база міграції;
- журнал інтеграцій;
- локальна черга API;
- тестова база для прототипу;
- тимчасове сховище контрольних сум;
- автономний компонент для збору даних;
- локальні конфігурація агента синхронізації. action
SELECT product_id, SUM(quantity) AS qty, SUM(amount) AS total DELETE видаляє запис. У бізнес-системах часто краще не видаляти фізично, а використовувати ознаку активності:
customer.save()
Приклад таблиці імпорту прайсу
INSERT INTO payments (amount, currency, payment_date) критично не плутати:
Приклад: Це здатна допомогти SQLite краще планувати виконання запитів. target_count
- не потребує окремого сервера;
- зберігає базу в одному файлі;
- функціонує всередині застосунку;
- підтримує SQL;
- має транзакції;
- проста для розгортання;
- добре підходить для локальних даних;
- часто застосовується для в мобільних і десктопних програмах. CREATE TABLE app_logs (
| ANALYZE;
Приклад: retry_count INTEGER DEFAULT 0, Python має вбудовану підтримку SQLite через компонент sqlite3. Без додаткового захисту не варто зберігати: INSERT
| ||
|---|---|---|
| Atomicity | операційна дія виконується на 100% або не виконується | Платіж не має бути наполовину проведений |
| Consistency | інформаційні дані залишаються узгодженими | Замовлення має існуючого клієнта |
| Isolation | Транзакції не повинні ламати одна одну | Паралельні операції не змішують інформаційні дані |
| Durability | Після COMMIT інформаційні дані збережені | Після запису інформаційні дані не зникають |
SQLite зручна для локального журналу подій. SET price = 190.00 ! payment_date TEXT NOT NULL
SQLite підтримує багато можливостей реляційних баз даних:
1000 грн 50 коп.== SELECT ==
Приклад резервної копії
Поле id виступає як унікальним і дає можливість точно знайти замовлення. Якщо сталася помилка, можна виконати:
conn.close()
ORM сформує SQL і збереже запис у SQLite. {| class="wikitable" style="width:100%;"
SQLite і серверні бази даних
Основні конкурентні переваги:
! FROM contracts
SQLite часто зберігає дати як TEXT, INTEGER або REAL.
SQLite і безпека
) ON orders (external_order_id);
! Призначення
Результат — проста, переносима й надійна локальна база для задач, де не потрібен окремий сервер: кеш, мобільний застосунок, прототип, тестування, міграція або невеликий інструмент. Що містить '''UNIQUE''' забороняє дублікати. SELECT * AND order_date < '2026-06-01';
HAVING COUNT(*) > 1;
- клієнтів;
- номенклатуру;
- ціни;
- залишки;
- чернетки замовлень;
- підписи клієнтів;
- фото;
- чергу синхронізації. Приклад використання
! Команда ANALYZE збирає статистику для оптимізатора запитів. * база не застосовується для;
- транзакції завершені;
- застосовується для штатний механізм backup;
- файл не копіюється під час активного запису. SQLite здатна бути корисною для локальних модулів, кешів, мобільних застосунків, агентів обміну або міграційних утиліт.== Приклад повільного сценарію ==
{| class="wikitable" style="width:100%;"
SQLite здатна зберігати BLOB-дані, як приклад файли або зображення. Після завантаження можна знайти товари без артикула:
[[Категорія:Індекси]]
Погано:
sku TEXT NOT NULL,
CREATE UNIQUE INDEX idx_orders_external_id
SQLite і Docker
! У полі payload можна зберегти JSON із API. |}
SQLite і права доступу
migration.db SELECT id, name, email SELECT *
|
SQLite зберігає: SQLite і Power BI |
Зміна
EXPLAIN QUERY PLAN SQLite і NULL<pre>
{| class="wikitable" style="width:100%;"
WHERE id = 10;
Для грошей потрібно бути уважним із типом REAL, бо числа з плаваючою точкою можуть давати неточності.== SQLite і тимчасові таблиці ==
Під час міграції SQLite можна використовувати для контрольних сум.
Практичний приклад. Якщо потрібно зробити локальну утиліту для вивантаження даних з BAS, 1С або старої ERP, SQLite здатна зберігати проміжні таблиці: номенклатуру, контрагентів, договори, залишки, помилки імпорту й контрольні суми перед завантаженням у K2 ERP.edrpou TEXT UNIQUE, GROUP BY product_id == Приклад індексів для інтеграції == ); WHERE supplier_id = 25; == CHECK == == SQLite і аудит дій == Файли: <pre> INSERT INTO price_audit (product_id, old_price, new_price, changed_at) * підготовки вивантажень; * зберігання локальних агрегатів; * контрольних сум; * тимчасових таблиць; * невеликих аналітичних наборів; * перевірки якості даних. FROM customers; * файл можна скопіювати; * у файлі можуть бути персональні інформаційні дані; * у файлі можуть бути клієнти; * у файлі можуть бути ціни; * у файлі можуть бути платежі; * локальний комп’ютер здатна бути втрачений; * резервні копії можуть зберігатися без контролю. Що означає !== Коли SQLite не підходить == === Чи підтримує SQLite SQL? === як приклад, агент обміну між сайтом і ERP здатна зберігати: phone TEXT Основні недоліки: .tables cursor.execute(""" Приклад: Якщо увімкнений WAL, потрібно враховувати додаткові файли або правильно завершити транзакції перед копіюванням. id INTEGER PRIMARY KEY,
Так не вийде зберегти рядок замовлення з від’ємною кількістю. ! # Перевіряє артикулі. | Проста файлова база для надійного локального зберігання даних без складного адміністрування. status TEXT DEFAULT 'new', user_id TEXT, FROM customers quantity REAL NOT NULL CHECK (quantity > 0), ); created_at TEXT NOT NULL SQLite у мобільних застосункахТригери корисні, але їх потрібно документувати, бо прихована логіка здатна ускладнювати підтримку. Причини переходу: У коді можна створити клієнта: supplier_sku TEXT, | |
|---|---|---|
| app.db | інформаційні дані застосунку | Десктопна програма |
| mobile.db | Локальні інформаційні дані телефона | Мобільний застосунок |
| migration.db | Проміжні інформаційні дані міграції | Перехід у K2 ERP |
| cache.db | Кеш API | Локальна синхронізація |
| logs.db | Журнал подій | Інтеграційний агент |
created_at TEXT NOT NULL
Причини:
Додати клієнта:
price REAL,
|-
| технічна архітектура
| Вбудована бібліотека
| Окремий сервер
|-
| Зберігання
| Один файл
| Серверні файли й служби
|-
| конфігурація
| Мінімальне
| Потрібне адміністрування
|-
| масштаб бізнесу
| Локальні й помірні задачі
| Великі системи й багато користувачів
|-
| Одночасний запис
| Обмежений
| Краще підтримується
|-
| Типовий сценарій
| Мобільний застосунок, кеш, прототип
| ERP, CRM, великий вебсервіс
|}
Операції:
<pre>
* база локальна;
* користувач системи один або їх небагато;
* інформаційні дані зберігаються на пристрої;
* потрібен офлайн-режим;
* потрібна проста установка;
* потрібно оперативно зробити прототип;
* потрібно обробити файл даних;
* потрібно зберегти кеш;
* потрібна тестова база;
* потрібне проміжне сховище для міграції. Приклад
== SQLite і контрольні суми ==
== SQLite і Python ==
== Приклад документації таблиці ==
! unit TEXT NOT NULL,
Приклад таблиці:
<pre>
CREATE TABLE orders (
* профіль користувача;
* кеш товарів;
* історія продукту замовлень;
* офлайн-документи;
* черга синхронізації;
* конфігурація;
* повідомлення;
* локальні довідники;
* інформаційні дані для роботи без інтернету. ! На відміну від серверних СУБД, таких як PostgreSQL, MySQL або Microsoft SQL Server, SQLite функціонує як бібліотека всередині застосунку. Приклад:
{| class="wikitable" style="width:100%;"
CREATE TABLE supplier_prices (
{| class="wikitable" style="width:100%;"
<pre>
== SQLite і PHP ==
<div style="border:3px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;">
Приклад черги інтеграції
Але потрібно пам’ятати: поведінка SQLite здатна відрізнятися від PostgreSQL або MySQL, тому критичні SQL-запити треба перевіряти на цільовій СУБД. Це здатна означати договори без дати завершення. Краще зберігати в Git:
Після цього пошук товару за артикулом буде швидшим:
Приклад запису:
== Що не варто зберігати в SQLite без захисту ==
!== Індекси SQLite ==
* дублікати;
* порожні поля;
* некоректні email;
* товари без артикулів;
* контрагентів без ЄДРПОУ;
* договори без валюти;
* документи без дати;
* залишки без складу;
* платежі без контрагента. # Завантажити кредиторку. # Сформувати файл оновлення версій для ERP. можна зберігати як:
* шифрування диска;
* захист операційної системи;
* обмеження доступу до файлу;
* окремі розширення або бібліотеки шифрування;
* шифрування чутливих полів;
* безпечне зберігання ключів;
* контроль резервних копій. SQLite підтримує транзакції через BEGIN, COMMIT і ROLLBACK. SQLite потрібна там, де потрібна проста, надійна й локальна база даних без складного адміністрування. object_type
SQLite підтримує стандартні SQL-операції. | У локальних модулях, мобільному офлайні, агентах інтеграції, кешах, тестах і проміжних базах міграції. SQLite підтримує SQL-запити: SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, індекси, транзакції, обмеження, представлення й тригери. UPDATE products
);
source_amount REAL,
}
Для інтеграцій SQLite часто зберігає зовнішні ідентифікатори. |-
| Для чого потрібна? # Готує файл для ERP. cursor.execute("SELECT id, name FROM customers")
* артикул;
* номер документа;
* дата;
* клієнт ERP;
* договір;
* статус;
* зовнішній ID;
* складський облік;
* організація;
* email;
* телефон.== SQLite і SQL-ін’єкції ==
Це оптимізує зв’язувати локальні записи з ERP, сайтом, CRM або API.[[Категорія:K2 ERP]]
CREATE VIEW active_customers AS
Основні команди:
Типовий принцип:
customer_id INTEGER NOT NULL,
Приклад таблиці логів:
SQLite дуже часто застосовується для в мобільних застосунках. як приклад:
Приклад:
SQLite краще використовувати на локальному диску. Номер замовлення
order_date TEXT NOT NULL,
id INTEGER PRIMARY KEY,
* info;
* warning;
* error;
* critical. * external_order_id;
* external_customer_id;
* external_payment_id;
* external_product_id;
* external_sync_id. BEGIN TRANSACTION;
migration.db-wal
'''SQLite''' — це реляційна база даних, яка дає можливість створювати таблиці, виконувати SQL-запити, зберігати записи, будувати індекси, використовувати транзакції, обмеження, JOIN, представлення й тригери. ORDER BY name;
order_date TEXT NOT NULL
[[Категорія:Реляційні бази даних]]
== Приклад офлайн-продажів ==
Це означає:
У цьому випадку SQLite зручна, бо не потрібно розгортати сервер бази даних. Для старту достатньо встановити інструмент SQLite або використати мову програмування з підтримкою SQLite.== UPDATE ==
Потім можна читати:
external_id TEXT,
FROM products |- | ORD-000145 | 2026-05-15 | ТОВ “клієнт ERP Плюс” |- | ORD-000146 | 2026-05-16 | ФОП Іваненко |}
SELECT edrpou, COUNT(*) AS cnt
SQLite на мережевому диску
FROM products NULL означає відсутність значення.== Первинний ключ ==
amount_cents INTEGER
status TEXT
|- | product | T-00145 | Не знайдено одиницю виміру |- | customer | C-00077 | Порожній ЄДРПОУ |- | contract | D-00031 | Не вказана валюта |}
SQLite і CLI
Це здатна бути корисно після масового видалення або очищення даних. Ознака Тимчасові таблиці корисні для проміжних розрахунків. SQLite здатна бути корисною для:
Приклад: отримати замовлення разом із клієнтами. level
object_id TEXT,
Звичайний файл SQLite сам по собі не виступає як автоматизовано зашифрованим.== SQLite і інтеграції ==
Power BI здатна працювати з даними, які були підготовлені в SQLite, через проміжні інструменти або драйвери. name TEXT NOT NULL
SQLite і дати
[[Категорія:Права доступу]] [[Категорія:CRM]] ! # Перевірити артикулі. price REAL, === Що таке SQLite простими словами? === ON products (sku); == ACID у SQLite == == SQLite і логування == Типові сценарії: SELECT * 2026-05-15 id INTEGER PRIMARY KEY, name="ТОВ клієнт ERP Плюс", SQLite не завжди підходить як головна база ERP, але здатна бути корисною в ERP-екосистемі.== Типові помилки при використанні SQLite == <pre> SQLite використовують у мобільних застосунках, десктопних програмах, тестах, кешах, локальних утилітах, прототипах, IoT, міграційних інструментах і невеликих внутрішніх системах. Пакетна транзакція здатна бути значно швидшою. Якщо помилка сталася на третьому кроці, краще відкотити все, щоб не залишити неповний запис. * інший бізнес-процес пише в базу; * довга транзакція; * файл відкритий кількома програмами; * не закрито підключення; * антивірус або синхронізація файлів блокує файл; * база лежить у проблемному мережевому каталозі. SQLite можна використовувати в контейнерах, але потрібно правильно зберігати файл бази. клієнт ERP number TEXT NOT NULL, FROM customers * локальна база десктопного застосунку; * кеш API; * тестова база; * імпорт CSV; * прототип сервісу; * локальний журнал подій. object_id migration.db-shm GROUP BY edrpou <pre> |- | Що таке SQLite? Таблиця == SQLite і VACUUM == ! |- | Який результат? SQLite відрізняється від серверних СУБД. Дата rows = cursor.fetchall() |- | raw_products | інформаційні дані товарів як у джерелі |- | clean_products | Очищена номенклатура |- | map_products | Відповідність старого й нового коду |- | err_products | Помилки товарів |- | ctl_products | Контрольні суми по товарах |} Приклад: ); * проста установка; * один файл бази; * не потрібен сервер; * технічна підтримка SQL; * транзакції; * хороша швидкість для локальних задач; * зручність для тестів; * зручність для мобільних застосунків; * зручність для міграційних утиліт; * переносимість; * мінімальне адміністрування. user_id id INTEGER PRIMARY KEY, ! object_type TEXT NOT NULL, <pre> ! ); [[Категорія:ERP]] <pre> * source_customers; * source_products; * source_contracts; * source_balances; * mapping_tables; * validation_errors; * migration_logs; * control_totals. У цьому режимі SQLite використовує додатковий журнал записів.
Добра структура SQLite для міграції
через EXPLAIN QUERY PLAN користувачі можуть зрозуміти, як виконується запит. Це полегшує сортування й фільтрацію.
FAQ
- обсяг даних;
- кількість користувачів;
- частоту запису;
- потребу в одночасному доступі;
- чутливість даних;
- резервне копіювання;
- структуру таблиць;
- індекси;
- транзакції;
- міграції структури;
- спосіб логування;
- правила очищення;
- сценарій переходу на серверну СУБД, якщо проєкт виросте. ! * імпорт прайсів;
- перевірка довідників;
- формування файлів міграції;
- локальний довідник контрагентів;
- логування API;
- синхронізація складу;
- підготовка контрольних сум. Але часто краще зберігати сам файл окремо, а в SQLite — шлях або метадані. source_amount
id INTEGER PRIMARY KEY,
Таблиці SQLite
SQLite добре функціонує з багатьма читачами, але має обмеження для багатьох одночасних записів. );
View або представлення — це збережений запит. SQLite не має такої серверної моделі користувачів і ролей, як корпоративні СУБД. FROM orders
SQLite здатна працювати з досить великими файлами, але практично її частіше використовують для локальних і помірних обсягів. SELECT * Іноді проєкт починається з SQLite, а потім переходить на PostgreSQL або іншу серверну СУБД. {| class="wikitable" style="width:100%;"
BEGIN TRANSACTION;
Приклад: Приклад:{| class="wikitable" style="width:100%;"
Приклади:
SQLite-файл потрібно захищати. |-
| Які головні ризики? COMMIT;
* [[SQL]]
* [[ORM]]
* [[ERP]]
* [[K2 ERP]]
* [[API для ERP]]
* [[Інтеграція з BAS]]
* [[Вивантаження даних]]
* [[Міграція даних]]
* [[Power BI]]
* [[BI система]]
* [[Service Desk]]
* [[Аудит дій]]
* [[Права доступу в ERP]]
* [[ERP для складу]]
* [[CRM для продажів]]
* [[ERP в хмарі]]
* [[Впровадження ERP]]
* [[Запуск ERP]]
Але VACUUM здатна займати час, тому його не варто запускати бездумно в активній системі. id INTEGER PRIMARY KEY,
<pre>
GROUP BY customer_id;
== Простий приклад SQLite ==
== SQLite і тригери ==
- мобільні застосунки;
- десктопні програми;
- локальні конфігурація;
- кеш API;
- офлайн-режим;
- тестування;
- прототипи;
- невеликі внутрішні інструменти;
- обробка CSV або Excel;
- міграційні утиліти;
- зберігання логів;
- локальні черги;
- embedded-системи;
- IoT-пристрої;
- навчальні приклади SQL.
SQLite і Git
VALUES ('ТОВ клієнт ERP Плюс', 'info@example.com', '+380XXXXXXXXX');
- NULL;
- порожній рядок ;
- 0;
- false. Її швидко підключити, швидко перенести, швидко зробити резервну копію, але вона не призначена для всіх сценаріїв великих багатокористувацьких ERP-систем.=== Чи підходить SQLite для ERP? ===
external_id TEXT NOT NULL,
SQLite і ANALYZE
SQLite-файл зазвичай не дуже зручний для зберігання в Git, якщо він часто змінюється. * розмір файлу;
- швидкість диска;
- кількість індексів;
- кількість записів;
- частоту запису;
- тривалість транзакцій;
- резервні копії;
- блокування;
- потребу в архівуванні. END;
);
Вбудована реляційна база даних, яка зберігає інформаційні дані в одному файлі. * офлайн-робоче місце;
total_amount REAL SQLite часто використовують у тестах. id INTEGER PRIMARY KEY, company.db '''SELECT''' застосовують, коли потрібно для читання даних. id INTEGER PRIMARY KEY,
VALUES (old.id, old.price, new.price, datetime('now'));
Приклад:
! У [[K2 ERP]] або проєктах навколо K2 ERP SQLite здатна використовуватися як допоміжна база. SET balance = balance - 80000
Типові сценарії:
[[Категорія:SQLite]]
== SQLite і аналітичні інструменти ==
Приклад даних:
<pre>
Індекси корисні для полів, за якими часто шукають або фільтрують:
|-
| customers
| 12450
| 12450
|
|
| OK
|-
| products
| 8200
| 8198
|
|
| CHECK
|-
| balances
| 15200
| 15200
| 18200000
| 18200000
| OK
|}
== Приклад обмежень ==
2026-05-15 10:30:00
Що таке SQLiteSQLite і EXPLAIN QUERY PLANVALUES ('USB-C-1M-BLK', 'Кабель USB-C 1 м чорний', 'шт.', 180.00); object_name TEXT NOT NULL, SQLite зручна для невеликих службових програм: А сам файл бази часто додають у .gitignore. Програма відкриває файл бази даних, виконує SQL-запити й сама керує доступом до цього файлу через SQLite. Поширені помилки: { |
Відповідь
конкурентні переваги: payload TEXT NOT NULL, name TEXT NOT NULL, number TEXT, sqlite3 company.db name TEXT NOT NULL, CREATE TABLE migration_errors ( Для захисту можуть використовуватися: SQLite — це легка база даних, яка зберігає всі таблиці й записи в одному файлі та не потребує окремого сервера.[[Категорія:Склад]] через зовнішньому ключу можна зрозуміти, якому клієнту належить замовлення. Це критично для цілісності даних. Що зберігає ! | Обмеження одночасного запису, відсутність серверної моделі прав, ризик копіювання файлу й неправильне використання у великих системах.== SQL-запити в SQLite == <pre> * вставляти 100 000 рядків по одному без транзакції; * після кожного INSERT чекати запису на диск. '''CHECK''' перевіряє значення. ORDER BY total DESC; __TOC__ * багато користувачів одночасно активно пишуть у базу; * потрібна велика серверна ERP; * потрібна складна платформа прав на рівні СУБД; * потрібна реплікація між серверами; * потрібне горизонтальне масштабування; * база має дуже велике навантаження на запис; * потрібні складні серверні процедури; * потрібна централізована корпоративна СУБД; * інформаційні дані мають оброблятися багатьма сервісами одночасно. status == SQLite і обмеження розміру == ! Якщо сайт передає замовлення в локальну SQLite-базу, варто створити індекс по зовнішньому номеру: UPDATE products == SQLite і десктопні ERP-утиліти == == SQLite і міграції структури == ! name '''WAL''' означає '''Write-Ahead Logging'''.== SQLite і ERP == currency TEXT NOT NULL DEFAULT 'UAH', Увімкнути WAL можна так: ! |- | Де корисна в ERP?== конкурентні переваги SQLite == * використовувати SQLite як серверну ERP-базу для багатьох користувачів; * не робити резервні копії; * зберігати файл у ненадійному місці; * не створювати індекси; * не використовувати транзакції; * вставляти великі обсяги рядок за рядком без транзакції; * зберігати секрети без захисту; * не контролювати зовнішні ключі; * не документувати схему; * копіювати файл під час активного запису; * використовувати SQLite на нестабільному мережевому диску. |
target_amount
Приклад фільтрації за датоюПриклад таблиці товарів: Статуси можуть бути: Приклад транзакції в міграції |
FROM customers
amount REAL NOT NULL CHECK (amount > 0), SET active = 0 Головне. SQLite — це база даних “в одному файлі”. Поле Таблиця зберігає інформаційні дані у вигляді рядків і колонок. * створення таблиць;
як приклад: Приклад: Такий запит поверне замовлення за травень 2026 року. SQLite
Який результат правильного використання SQLite? |
WHERE id = 10;
Але краще робити копію тоді, коли: number TEXT NOT NULL, email="info@example.com" </div> '''GROUP BY''' групує інформаційні дані для підсумків. FROM products ADD COLUMN status TEXT DEFAULT 'new'; * new; * processing; * sent; * error; * skipped. '''UPDATE''' змінює існуючий запис. Файл можна скопіювати, архівувати, перенести на інший комп’ютер або підключити до іншої програми.== SQLite і перехід на серверну СУБД == * виступає як кілька читачів; * виступає як фоновий бізнес-процес запису; * застосунок активно читає інформаційні дані; * потрібна краща паралельність; * база застосовується для як локальний кеш. Варіант FOREIGN KEY (customer_id) REFERENCES customers(id) ! WHERE sku = 'USB-C-1M-BLK'; -- багато INSERT ! Принцип |
|---|---|---|---|---|
| customers | id | 15 | ||
| customers | name | ТОВ “клієнт ERP Плюс” | ||
| orders | customer_id | 15 | ||
| orders | number | ORD-000145 |
Після відновлення зв’язку інформаційні дані передаються в ERP.== WAL-режим SQLite ==
SQLite зручна для очищення даних перед міграцією.
Приклад:
Приклади:
* таблиці;
* поля;
* ключі;
* індекси;
* тригери;
* представлення;
* зв’язки;
* правила міграції;
* контрольні суми;
* джерела даних. Приклад:
{| class="wikitable" style="width:100%;"
INSERT INTO customers (name, email, phone)
id INTEGER PRIMARY KEY,
# Отримати CSV від постачальника. id
== SQLite і одночасний доступ ==
);
SQLite для міграції даних
- зберігати суму в копійках як INTEGER;
- використовувати округлення;
- контролювати точність у застосунку;
- не використовувати SQLite як провідний фінансовий контур великої ERP без продуманої моделі. | Для локальних застосунків, мобільних програм, кешу, тестів, прототипів, логів і міграційних утиліт. Приклад:
- Створити контрагента. | 180.00
| 1 |- | 2 | COFFEE-1KG | Кава арабіка 1 кг | кг | 720.00 | 1 |}
Чим SQLite відрізняється від PostgreSQL або MySQL?
SQLite і грошові суми
SELECT edrpou, COUNT(*) AS cnt
- INTEGER;
- REAL;
- TEXT;
- BLOB;
- NULL. # Завантажити в SQLite. object_type
currency TEXT,
Такий запит покаже продажі та реалізація по товарах.== Приклад пошуку дублів == Можна шукати:
SQLite добре підходить як проміжна база для міграції. | Ні, SQLite функціонує без окремого серверного процесу.
! CREATE TABLE control_totals (
- не втрачати файл після перезапуску контейнера;
- використовувати volume;
- контролювати резервні копії;
- не запускати багато контейнерів, які одночасно пишуть в один файл;
- розуміти обмеження файлової бази.== Недоліки SQLite ==
!
ORDER BY сортує результат. CREATE TABLE payments (
Ризики:
payload TEXT NOT NULL,
SQLite добре підходить для навчання SQL. У ньому можна створити таблицю клієнтів:
VACUUM;
Параметр ? оптимізує безпечніше передавати значення в запит. );
Знайти дублікати контрагентів за ЄДРПОУ:
VALUES (80000, 'UAH', '2026-05-15');
- локальних довідників;
- налаштувань;
- журналів;
- кешу;
- імпорту файлів;
- локальної аналітики;
- невеликих CRM;
- складських утиліт;
- інструментів міграції.== Приклад логів інтеграції ==
CREATE TABLE customers (
"total": 24500
Практичний варіант — зберігати дату в ISO-форматі:
SQLite має консольний інструмент, через який можна працювати з базою.
виступає як файл: INSERT INTO products (sku, name, unit, price) BEGIN );
SQLite і помилки блокування
SQL-ін’єкція — це атака, коли користувач системи вводить текст, який змінює SQL-запит. Приклади:
Це інтуїтивно під час аналізу або міграції.
id INTEGER PRIMARY KEY,
- блокування;
- пошкодження;
- нестабільна швидкість;
- проблеми з одночасним доступом;
- некоректна робота файлових блокувань. тимчасового збереження вивантажених довідників забезпечується через У контексті K2 ERP, інтеграцій, міграції даних або локальних агентів SQLite здатна використовуватися як проміжне сховище:; так само реалізовано логів інтеграцій, контрольних сум, черг обміну, кешу API, локальних налаштувань, даних для тестування або невеликого автономного модуля. product_name TEXT,
target_count INTEGER,
SEO title: SQLite — вбудована база даних, SQL, файлова БД, транзакції, індекси, ORM і ERP
SEO keywords: SQLite, база даних SQLite, SQL, файлова база даних, вбудована база даних, SQLite приклади, SQLite транзакції, SQLite індекси, SQLite WAL, ORM SQLite, ERP, K2 ERP
</noinclude>
{{SEO
Шаблон для службового SEO-опису сторінки.
}}
У PHP SQLite здатна використовуватися для невеликих сайтів, внутрішніх інструментів або прототипів. ! * не ідеальна для багатьох одночасних записів;
- немає повноцінної серверної моделі користувачів;
- не найкращий вибір для великої ERP;
- обмежені функції ERP адміністрування порівняно із серверними СУБД;
- потрібно уважно працювати з файлами;
- ризик блокувань;
- не варто зберігати чутливі інформаційні дані без захисту;
- не всі функції ERP SQL такі самі, як у великих СУБД. |-
| Чи потрібен сервер? price REAL NOT NULL CHECK (price >= 0)
Для багатокористувацького мережевого сценарію краще серверна СУБД. !== SQLite і імпорт CSV == .schema customers
message TEXT NOT NULL,Так. | Так, підтримує таблиці, SELECT, INSERT, UPDATE, DELETE, JOIN, індекси, транзакції й обмеження. SELECT *
| - | Чи підтримує SQL?== Типи даних у SQLite ==
Зовнішній ключ зв’язує одну таблицю з іншою.== Приклад аналітики по продажах == Комірник функціонує з планшетом у зоні слабкого інтернету. реліз системи SQLite зручна для тестування ORM, бо базу швидко створити, очистити й видалити.=== Для чого використовують SQLite? === * NOT NULL; * UNIQUE; * CHECK; * PRIMARY KEY; * FOREIGN KEY; * DEFAULT. created_at ALTER TABLE orders SQLite часто використовують для обробки CSV-файлів. Але як основна база великої багатокористувацької ERP вона зазвичай не підходить. Приклади локальних даних: <pre> * паролі; * API-ключі; * банківські реквізити; * зарплатні інформаційні дані; * персональні інформаційні дані; * комерційні прайси; * конфіденційні договори; * токени доступу; * фінансові звіти. |- | 1 | USB-C-1M-BLK | Кабель USB-C 1 м чорний | шт. # Завантажити дебіторку. action TEXT NOT NULL, ); == SQLite як файлова база даних == == Приклад ORM + SQLite == Параметризовані запити зменшують ризик SQL-ін’єкцій. JOIN customers ON customers.id = orders.customer_id; |
Можна вивчати:
WAL-режим здатна покращити роботу при одночасному читанні й записі. Так. як приклад, замовлення належить клієнту:
критично враховувати:
== Транзакції SQLite ==
UPDATE supplier_balances
Це корисно для пошуку повільних запитів і перевірки, чи застосовується для індекс.<pre>
SQLite-файл потрібно захищати так само, як інші інформаційні дані.<pre>
SELECT id, name, email, phone
== SQLite і шифрування ==
{| class="wikitable" style="width:100%;"
== Для чого потрібна SQLite ==
== Приклад: де SQLite недоречна ==
'''INSERT''' додає новий запис. FROM sales
як приклад, при переході з BAS або старої ERP у K2 ERP можна зробити локальну базу:
"order_id": "WEB-10425",
У застосунках краще вести міграції версіями:
! sku
! CREATE TABLE order_lines (
CREATE TABLE IF NOT EXISTS customers (
COMMIT;
CREATE TABLE audit_log (
== Приклад: де SQLite доречна ==
=== Що таке WAL у SQLite? ===
як приклад:
SELECT *
name TEXT NOT NULL
{| class="wikitable" style="width:100%;"
id INTEGER PRIMARY KEY,
CREATE TABLE orders (
== DELETE ==
Якщо SQLite застосовується для в бізнес-процесах, потрібно вести аудит. Індекс прискорює пошук. * продажі та реалізація;
* закупівельна діяльність;
* складський облік;
* виробництво;
* фінансовий блок;
* зарплата;
* банк;
* каса;
* Power BI;
* API;
* інтеграції;
* аудит дій.=== Чи безпечна SQLite для конфіденційних даних? ===
== Обмеження SQLite ==
Вона робить:
Тригер — це дія, яка автоматизовано виконується при INSERT, UPDATE або DELETE. PostgreSQL і MySQL — це серверні СУБД, краще пристосовані для багатьох користувачів, великих систем і високого навантаження. object_id
SQLite функціонує як вбудована файлова база без окремого сервера. CREATE TEMP TABLE temp_duplicates AS Приклад процесу:
{| class="wikitable" style="width:100%;"
PRAGMA journal_mode=WAL;
== Що підготувати перед використанням SQLite у проєкті ==
SQLite добре підходить, якщо:
компанія-користувач хоче запустити основну ERP для 300 користувачів:
CREATE TABLE sync_queue (
Коли SQLite підходитьПриклад аудиту зміни ціни: Щоб SQLite працювала швидше, потрібно: SQLite підтримує принципи ACID. Отримати клієнтів: |
|---|