Перейти к основному содержимому

Выполнить запрос SQL

Выполняет произвольный SQL запрос

Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса, Знач Параметры = "", Знач ФорсироватьРезультат = Ложь, Знач Соединение = "") Экспорт

ПараметрCLI опцияТипОбяз.Назначение
ТекстЗапроса--sqlСтрокаТекст запроса к базе
Параметры--paramsМассив Из ПроизвольныйМассив позиционных параметров запроса
ФорсироватьРезультат--forceБулевоВключает попытку получения результата, даже для не SELECT запросов
Соединение--dbСтрока, ПроизвольныйСуществующее соединение или путь к базе. In memory, если не заполнено

Возвращаемое значение: Структура Из КлючИЗначение - Результат выполнения запроса


подсказка

Доступные типы параметров: Cтрока, Число, Дата, Булево, ДвоичныеДанные. Двоичные данные могут также быть переданы как структура {'blob':Путь к файлу}. Возвращаются значения двоичных данных (BLOB) в виде {'blob':Base64 строка}

Без указания флага ФорсироватьРезультат, чтение результата осуществляется только для запросов, начинающихся с SELECT Для остальных запросов возвращается result:true или false с текстом ошибки


Пример использования для 1С:Предприятие/OneScript
    ИВФ = ПолучитьИмяВременногоФайла("sqlite");

Картинка = "https://api.athenaeum.digital/test_data/picture.jpg";
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные

Соединение = OPI_SQLite.ОткрытьСоединение(ИВФ);

// CREATE

ТекстЗапроса = "
|CREATE TABLE test_table (
|id INTEGER PRIMARY KEY,
|name TEXT,
|age INTEGER,
|salary REAL,
|is_active BOOLEAN,
|created_at DATETIME,
|data BLOB
|);";

Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);

// INSERT с параметрами

ТекстЗапроса = "
|INSERT INTO test_table (name, age, salary, is_active, created_at, data)
|VALUES (?1, ?2, ?3, ?4, ?5, ?6);";

МассивПараметров = Новый Массив;
МассивПараметров.Добавить("Vitaly"); // TEXT
МассивПараметров.Добавить(25); // INTEGER
МассивПараметров.Добавить(1000.12); // REAL
МассивПараметров.Добавить(Истина); // BOOL
МассивПараметров.Добавить(OPI_Инструменты.ПолучитьТекущуюДату()); // DATETIME
МассивПараметров.Добавить(Картинка); // BLOB

Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, МассивПараметров, , Соединение);

// SELECT (Результат этого запроса приведен в следующем блоке)

ТекстЗапроса = "SELECT id, name, age, salary, is_active, created_at, data FROM test_table;";

Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);

// Транзакция

ТекстЗапроса = "BEGIN TRANSACTION;
| CREATE TABLE IF NOT EXISTS users (
| id INTEGER PRIMARY KEY AUTOINCREMENT,
| name TEXT NOT NULL,
| age INTEGER NOT NULL
| );
| INSERT INTO users (name, age) VALUES ('Alice', 30);
| INSERT INTO users (name, age) VALUES ('Bob', 25);
| INSERT INTO users (name, age) VALUES ('Charlie', 35);
| COMMIT;";

Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);

Закрытие = OPI_SQLite.ЗакрытьСоединение(Соединение);
    oint sqlite ВыполнитьЗапросSQL \
--sql "SELECT id, name, age, salary, is_active, created_at, data FROM test_table;" \
--db "C:\Users\Administrator\AppData\Local\Temp\ajpjmer110c.sqlite"
Результат
{
"data": [
{
"age": 25,
"created_at": "2025-01-09 23:01:34",
"data": {
"blob": "Base64"
},
"id": 1,
"is_active": 1,
"name": "Vitaly",
"salary": 1000.12
}
],
"result": true
}