База данных

В z3n7 два способа работать с базой. Оба поддерживают PostgreSQL и SQLite (SQLite — через драйвер SQLite3 ODBC, он должен быть установлен).

Класс Db

Db получает настройки подключения явно или из проекта:

// явные настройки
var db = new Db("SQLite", sqLitePath: @"C:\data\accounts.db", defaultTable: "accounts");

// из проекта: DBmode, DBsqltPath и глобальные переменные sqlPg*
var db = new Db(project);

string balance = db.Get("balance", id: 5);            // одна строка по id
var row = db.GetColumns("login, proxy", id: 5);       // колонка → значение
db.Upd("status = 'ok'", id: 5);

Каждый запрос открывает своё подключение. SELECT возвращает строки, склеенные через ·, и колонки через ¦.

Помощники project.Db*

Методы расширения DbGet, DbUpd, DbQ и другие работают с базой из переменной dbSource (переменная проекта, иначе глобальная):

  • значение, начинающееся с Host=, — строка подключения PostgreSQL;
  • любое другое значение выбирает SQLite; тогда DbQ открывает файл из своего аргумента sqLitePath, а помощники Db* его не передают.

Если не сказано иное, они работают со строкой текущего аккаунта: таблица по умолчанию — таблица проекта (__{имя проекта}), строка — id = acc0.

project.Var("acc0", "7");
string login = project.DbGet("login");                 // __myproject, id = 7
project.DbUpd("status = 'done'");                      // та же строка
project.DbDone("daily", cooldownMin: 60);              // метка «кулдауна»
var proxy = project.DbGet("proxy", "_instance");       // другая таблица, тот же аккаунт

Подготовка таблицы

// id + перечисленные колонки + по колонке на каждый пункт cfgToDo
project.PrepareProjectTable(new List<string> { "login", "status", "daily" });
project.AddRange(project.Var("projectTable"));         // строки 1..rangeEnd

PrepareProjectTable создаёт таблицу при необходимости и добавляет недостающие колонки; prune удаляет лишние, rearrange упорядочивает.

Соглашения

  • id — номер аккаунта.
  • Значения в id и внутри where попадают в SQL как есть; текст заключайте в кавычки сами.
  • В условиях выбора аккаунта слово NOW заменяется текущим временем в формате yyyy-MM-ddTHH:mm:ss (см. 06. Работа с аккаунтом).
  • Таблицы самой библиотеки: _instance (прокси, cookies, WebGL аккаунта), _api (учётные данные внешних сервисов по id), _processes (ProcessManager).

См. также: База данных, API Db.