ab_engine 0.2.1__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. {ab_engine-0.2.1 → ab_engine-0.2.2}/PKG-INFO +17 -14
  2. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_mysql.py +9 -1
  3. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_postgresql.py +3 -1
  4. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/config.py +28 -26
  5. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/db_context.py +2 -2
  6. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/PKG-INFO +17 -14
  7. {ab_engine-0.2.1 → ab_engine-0.2.2}/pyproject.toml +1 -1
  8. {ab_engine-0.2.1 → ab_engine-0.2.2}/readme.md +16 -13
  9. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/__init__.py +0 -0
  10. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/class_tools.py +0 -0
  11. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/__init__.py +0 -0
  12. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver.py +0 -0
  13. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_sqlite.py +0 -0
  14. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_valkey.py +0 -0
  15. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/option.py +0 -0
  16. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/processor.py +0 -0
  17. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/table.py +0 -0
  18. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/__init__.py +0 -0
  19. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/timer.py +0 -0
  20. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/error.py +0 -0
  21. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/error.yaml +0 -0
  22. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/__init__.py +0 -0
  23. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/fnc.py +0 -0
  24. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/json_rpc.py +0 -0
  25. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/rpc.py +0 -0
  26. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/SOURCES.txt +0 -0
  27. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/dependency_links.txt +0 -0
  28. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/requires.txt +0 -0
  29. {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/top_level.txt +0 -0
  30. {ab_engine-0.2.1 → ab_engine-0.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ab_engine
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Library of standard modules
5
5
  Author-email: Andrew Bulatov <BulatovAndrew@gmail.com>
6
6
  License-Expression: MIT
@@ -167,17 +167,17 @@ create table config(
167
167
 
168
168
  нресколько имен ключей файла конфигурации зарезервированы и являются специальными:
169
169
 
170
- **timers** - определяет интервалы для таймеров системы
171
- **logging** - позволяет задать настройки логирования
172
- **database**- содержит строки соединения с одной или несколькими БД
173
- **defaults**- содержит значения по умолчанию
170
+ * **timers** - определяет интервалы для таймеров системы
171
+ * **logging** - позволяет задать настройки логирования
172
+ * **database**- содержит строки соединения с одной или несколькими БД
173
+ * **defaults**- содержит значения по умолчанию
174
174
 
175
175
  #### Значения по умолчанию
176
176
 
177
- **defaults.name** - имя, подставляемое в лог как имя сервиса
178
- **defaults.database** - имя соединения БД по умолчанию
179
- **defaults.plugin_path** - путь к каталогу плагинов
180
- **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
177
+ * **defaults.name** - имя, подставляемое в лог как имя сервиса
178
+ * **defaults.database** - имя соединения БД по умолчанию
179
+ * **defaults.plugin_path** - путь к каталогу плагинов
180
+ * **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
181
181
 
182
182
  ## Управление таймерами
183
183
 
@@ -209,7 +209,7 @@ callbac должен быть функцией вида:
209
209
  >
210
210
  > ...
211
211
 
212
- в параметр **name** передается в имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
212
+ в параметр **name** передается имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
213
213
 
214
214
  Предусмотрены следующие типы интервалов работы таймера:
215
215
 
@@ -219,7 +219,7 @@ callbac должен быть функцией вида:
219
219
  * TimerInterval.HOUR
220
220
  * TimerInterval.DAY
221
221
 
222
- Для управления таймерами, также, используются:
222
+ Для управления таймерами, также, используются методы:
223
223
 
224
224
  * **start**(immediately_start=True) - запускает таймер, если он остановлен. Если immediately_start=False, то таймер ждет свой
225
225
  интервал и только потом запускает callback, иначе callback будет запущен сразу после вызова start()
@@ -277,7 +277,7 @@ if __name__ == '__main__':
277
277
  - code: ERROR # код для вызова из функции raise_error
278
278
  http: 444 # код для возврата для HTTP. можно не указывать
279
279
  msg: В {place} у объекта {name} случилось {what} # Сообщение в которое будут подставлены kwargs из raise_error
280
- class: Error # задает класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было нре указывать)
280
+ class: Error # задаёт класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было не указывать)
281
281
  - code: OTHER_ERROR
282
282
  class: Exception
283
283
  msg: Еще ошибка
@@ -373,6 +373,7 @@ logging:
373
373
  ## Доступ к БД
374
374
 
375
375
  Библиотека поддерживает хранение настроек соединений и выполнение команд SQL на этих соединениях с БД.
376
+
376
377
  Из коробки реализованы драйвер Postgresql, Sqlite и Valkey (Redis). Также реализован драйвер Mysql но для его работы дополнительно надо установить зависимость mysql-connector-python.
377
378
 
378
379
  Можно описывать драйвера к другим БД. Для того чтобы использовать собственный драйвер, можно добавить класс драйвера
@@ -422,7 +423,7 @@ database: postgresql://localhost:5432/postgres?user=postgres&password=postgres
422
423
  ```toml
423
424
  [database]
424
425
  test = "postgresql://localhost:5432/test?user=postgres&password=postgres"
425
- mydb = "postgresql://localhost:5432/mydb?user=postgres&password=postgres"
426
+ mydb = "postgresql://postgres:postgres@localhost:5432/mydb"
426
427
 
427
428
  [defaults]
428
429
  database = "test"
@@ -445,7 +446,7 @@ database = "test"
445
446
  который ограничит максимальное количество таких соединений. Т.е. по достижении данного числа соединений система
446
447
  не станет выполнять очередную команду до тех пор, пока не освободится одно из текущих соединений с БД.
447
448
 
448
- Для некоторых драйверов, например, для встроенного драйвера posstgresql строка сооединения с БД
449
+ Для некоторых драйверов, например, для встроенного драйвера postgresql строка сооединения с БД
449
450
  может иметь альтернативную структуру:
450
451
 
451
452
  <имя_драйвера>**://**<имя пользователя>**:**<пароль>**@**<адрес сервера>**:**<номер порта>**/**<имя БД>**?**<параметры соединения>**{**дополнительные параметры**}**
@@ -616,6 +617,7 @@ inner join t2 on t2.t_id=t.id and t2.name=$name
616
617
  where t.date < now()::date;
617
618
  ```
618
619
  система автоматически создает подстроку со значением параметра и, при необходимости, заключает это значение в кавычки.
620
+
619
621
  |**Тип python**|**Тип БД**|**В кавычках**|
620
622
  |--------|---------|-----|
621
623
  | None | NULL | [ ] |
@@ -685,6 +687,7 @@ async def sql(query:str, *args, **kwargs):
685
687
 
686
688
  Опции, это специальные параметры, которые влияют на выполнение запроса в целом.
687
689
  Передавать опции можно только в конце списка args, после позиционных параметров, либо вместо них.
690
+
688
691
  В библиотеке реализованы следующие опции:
689
692
  * DB - служит для передачи соединения в функцию sql. Передается как DB("строка соединения").
690
693
  * NOTICE - то же, что DB, но запросы с такой опцией возвращают как результат список сообщений нотификации
@@ -69,8 +69,16 @@ class Driver(BaseDriver):
69
69
  self._conn_params[k] = v
70
70
 
71
71
  async def begin(self):
72
- await self._before_open()
72
+ params = await self._before_open()
73
73
  self._conn = await connect(**self._conn_params)
74
+ if params:
75
+ cur = await self._conn.cursor()
76
+ try:
77
+ for x in params:
78
+ p = x if x.startswith("@") else f"@{x.strip()}"
79
+ await cur.execute(f"SET {p} = '{params[x]}'")
80
+ finally:
81
+ await cur.close()
74
82
 
75
83
  async def sql(self, query, one_row=False, row_factory=RowFactory.DICT):
76
84
  if self._conn is None:
@@ -56,8 +56,10 @@ class Driver(BaseDriver):
56
56
  for x in params:
57
57
  if x == "TIMEZONE":
58
58
  await self._conn.execute(f"set session timezone '{params[x]}'")
59
+ elif x.startswith("pg_"):
60
+ await self._conn.execute(f"SET {x[3:]} = '{params[x]}'")
59
61
  else:
60
- await self._conn.execute(f"SET {x} = '{params[x]}'")
62
+ await self._conn.execute(f"select set_config('{x if '.' in x else f'my_app.{x}'}','{params[x]}', true)")
61
63
  if self._notify:
62
64
  self._conn.add_notify_handler(self._notify_callback)
63
65
 
@@ -14,6 +14,9 @@ from ..error import error, error_msg
14
14
  import asyncio
15
15
 
16
16
 
17
+ _LIB_PATH = str(Path(__file__).parent.parent)
18
+
19
+
17
20
  class LogLevel(Enum):
18
21
  CRITICAL = LOG.CRITICAL
19
22
  FATAL = LOG.FATAL
@@ -482,32 +485,31 @@ class Config:
482
485
  "extra": None,
483
486
  "sinfo": None
484
487
  }
485
- if self._log_level.value <= LogLevel.DEBUG.value or isinstance(msg, Exception):
486
- if 'stacklevel' not in kwargs:
487
- lvl = 2
488
- info = log_to.findCaller(stacklevel=lvl)
489
- p = str(Path(__file__).parent.parent)
490
- while info[0].startswith(p):
491
- lvl += 1
492
- x = log_to.findCaller(stacklevel=lvl)
493
- if '/venv/' in x[0]:
494
- break
495
- elif not x[0].startswith(p):
496
- info = x
497
- break
498
- else:
499
- info = x
500
- else:
501
- info = log_to.findCaller(stacklevel=kwargs.get('stacklevel', 2))
502
-
503
- if isinstance(msg, Exception):
504
- params["fn"] = info[0]
505
- else:
506
- x = info[0].rsplit("/", 2)
507
- del x[0]
508
- params["fn"] = '/'.join(x)
509
- params["func"] = info[2]
510
- params["lno"] = info[1]
488
+ #if self._log_level.value <= LogLevel.DEBUG.value or isinstance(msg, Exception):
489
+ if level.value > LogLevel.DEBUG.value:
490
+ info = ("", "", "")
491
+ elif 'stacklevel' not in kwargs:
492
+ lvl = 2
493
+ info = log_to.findCaller(stacklevel=lvl)
494
+ while info[0].startswith(_LIB_PATH):
495
+ lvl += 1
496
+ x = log_to.findCaller(stacklevel=lvl)
497
+ if not x[0].startswith(_LIB_PATH):
498
+ info = x
499
+ break
500
+ else:
501
+ info = x
502
+ else:
503
+ info = log_to.findCaller(stacklevel=kwargs.get('stacklevel', 2))
504
+
505
+ if isinstance(msg, Exception):
506
+ params["fn"] = info[0]
507
+ else:
508
+ x = info[0].rsplit("/", 2)
509
+ del x[0]
510
+ params["fn"] = '/'.join(x)
511
+ params["func"] = info[2]
512
+ params["lno"] = info[1]
511
513
 
512
514
  if "timer" in kwargs:
513
515
  n = kwargs["timer"]
@@ -29,7 +29,7 @@ class DB_ENV(UserDict):
29
29
  """
30
30
  Окружение для работы с БД
31
31
  :param connection: строка соеддинения или экземпляр DB_ENV, на основе которого нужно создать данный
32
- :param db_params: список переменных, которые должны передаваться в в окружение соединения с БД
32
+ :param db_params: список имен переменных, которые должны передаваться в соединение с БД
33
33
  :param notify: список или функция, в которую будут переданы извещения о событиях
34
34
  :param kwargs: значения переменных
35
35
  """
@@ -102,7 +102,7 @@ class DB_ENV(UserDict):
102
102
  if self._context is not None:
103
103
  raise_error("ENV_CONTEXT_EXISTS")
104
104
  if self._db_params:
105
- s = self._connection_str + f"{{{dumps({x:self[x] for x in self._db_params if self.has_item(x)})}}}"
105
+ s = self._connection_str + dumps({x:self[x] for x in self._db_params if self.has_item(x)})
106
106
  else:
107
107
  s = self._connection_str
108
108
  self._context = DB(s, notify=self._notify)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ab_engine
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Library of standard modules
5
5
  Author-email: Andrew Bulatov <BulatovAndrew@gmail.com>
6
6
  License-Expression: MIT
@@ -167,17 +167,17 @@ create table config(
167
167
 
168
168
  нресколько имен ключей файла конфигурации зарезервированы и являются специальными:
169
169
 
170
- **timers** - определяет интервалы для таймеров системы
171
- **logging** - позволяет задать настройки логирования
172
- **database**- содержит строки соединения с одной или несколькими БД
173
- **defaults**- содержит значения по умолчанию
170
+ * **timers** - определяет интервалы для таймеров системы
171
+ * **logging** - позволяет задать настройки логирования
172
+ * **database**- содержит строки соединения с одной или несколькими БД
173
+ * **defaults**- содержит значения по умолчанию
174
174
 
175
175
  #### Значения по умолчанию
176
176
 
177
- **defaults.name** - имя, подставляемое в лог как имя сервиса
178
- **defaults.database** - имя соединения БД по умолчанию
179
- **defaults.plugin_path** - путь к каталогу плагинов
180
- **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
177
+ * **defaults.name** - имя, подставляемое в лог как имя сервиса
178
+ * **defaults.database** - имя соединения БД по умолчанию
179
+ * **defaults.plugin_path** - путь к каталогу плагинов
180
+ * **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
181
181
 
182
182
  ## Управление таймерами
183
183
 
@@ -209,7 +209,7 @@ callbac должен быть функцией вида:
209
209
  >
210
210
  > ...
211
211
 
212
- в параметр **name** передается в имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
212
+ в параметр **name** передается имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
213
213
 
214
214
  Предусмотрены следующие типы интервалов работы таймера:
215
215
 
@@ -219,7 +219,7 @@ callbac должен быть функцией вида:
219
219
  * TimerInterval.HOUR
220
220
  * TimerInterval.DAY
221
221
 
222
- Для управления таймерами, также, используются:
222
+ Для управления таймерами, также, используются методы:
223
223
 
224
224
  * **start**(immediately_start=True) - запускает таймер, если он остановлен. Если immediately_start=False, то таймер ждет свой
225
225
  интервал и только потом запускает callback, иначе callback будет запущен сразу после вызова start()
@@ -277,7 +277,7 @@ if __name__ == '__main__':
277
277
  - code: ERROR # код для вызова из функции raise_error
278
278
  http: 444 # код для возврата для HTTP. можно не указывать
279
279
  msg: В {place} у объекта {name} случилось {what} # Сообщение в которое будут подставлены kwargs из raise_error
280
- class: Error # задает класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было нре указывать)
280
+ class: Error # задаёт класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было не указывать)
281
281
  - code: OTHER_ERROR
282
282
  class: Exception
283
283
  msg: Еще ошибка
@@ -373,6 +373,7 @@ logging:
373
373
  ## Доступ к БД
374
374
 
375
375
  Библиотека поддерживает хранение настроек соединений и выполнение команд SQL на этих соединениях с БД.
376
+
376
377
  Из коробки реализованы драйвер Postgresql, Sqlite и Valkey (Redis). Также реализован драйвер Mysql но для его работы дополнительно надо установить зависимость mysql-connector-python.
377
378
 
378
379
  Можно описывать драйвера к другим БД. Для того чтобы использовать собственный драйвер, можно добавить класс драйвера
@@ -422,7 +423,7 @@ database: postgresql://localhost:5432/postgres?user=postgres&password=postgres
422
423
  ```toml
423
424
  [database]
424
425
  test = "postgresql://localhost:5432/test?user=postgres&password=postgres"
425
- mydb = "postgresql://localhost:5432/mydb?user=postgres&password=postgres"
426
+ mydb = "postgresql://postgres:postgres@localhost:5432/mydb"
426
427
 
427
428
  [defaults]
428
429
  database = "test"
@@ -445,7 +446,7 @@ database = "test"
445
446
  который ограничит максимальное количество таких соединений. Т.е. по достижении данного числа соединений система
446
447
  не станет выполнять очередную команду до тех пор, пока не освободится одно из текущих соединений с БД.
447
448
 
448
- Для некоторых драйверов, например, для встроенного драйвера posstgresql строка сооединения с БД
449
+ Для некоторых драйверов, например, для встроенного драйвера postgresql строка сооединения с БД
449
450
  может иметь альтернативную структуру:
450
451
 
451
452
  <имя_драйвера>**://**<имя пользователя>**:**<пароль>**@**<адрес сервера>**:**<номер порта>**/**<имя БД>**?**<параметры соединения>**{**дополнительные параметры**}**
@@ -616,6 +617,7 @@ inner join t2 on t2.t_id=t.id and t2.name=$name
616
617
  where t.date < now()::date;
617
618
  ```
618
619
  система автоматически создает подстроку со значением параметра и, при необходимости, заключает это значение в кавычки.
620
+
619
621
  |**Тип python**|**Тип БД**|**В кавычках**|
620
622
  |--------|---------|-----|
621
623
  | None | NULL | [ ] |
@@ -685,6 +687,7 @@ async def sql(query:str, *args, **kwargs):
685
687
 
686
688
  Опции, это специальные параметры, которые влияют на выполнение запроса в целом.
687
689
  Передавать опции можно только в конце списка args, после позиционных параметров, либо вместо них.
690
+
688
691
  В библиотеке реализованы следующие опции:
689
692
  * DB - служит для передачи соединения в функцию sql. Передается как DB("строка соединения").
690
693
  * NOTICE - то же, что DB, но запросы с такой опцией возвращают как результат список сообщений нотификации
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ab_engine"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  description = "Library of standard modules"
5
5
  authors = [{name = "Andrew Bulatov", email = "BulatovAndrew@gmail.com"}]
6
6
  license = "MIT"
@@ -153,17 +153,17 @@ create table config(
153
153
 
154
154
  нресколько имен ключей файла конфигурации зарезервированы и являются специальными:
155
155
 
156
- **timers** - определяет интервалы для таймеров системы
157
- **logging** - позволяет задать настройки логирования
158
- **database**- содержит строки соединения с одной или несколькими БД
159
- **defaults**- содержит значения по умолчанию
156
+ * **timers** - определяет интервалы для таймеров системы
157
+ * **logging** - позволяет задать настройки логирования
158
+ * **database**- содержит строки соединения с одной или несколькими БД
159
+ * **defaults**- содержит значения по умолчанию
160
160
 
161
161
  #### Значения по умолчанию
162
162
 
163
- **defaults.name** - имя, подставляемое в лог как имя сервиса
164
- **defaults.database** - имя соединения БД по умолчанию
165
- **defaults.plugin_path** - путь к каталогу плагинов
166
- **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
163
+ * **defaults.name** - имя, подставляемое в лог как имя сервиса
164
+ * **defaults.database** - имя соединения БД по умолчанию
165
+ * **defaults.plugin_path** - путь к каталогу плагинов
166
+ * **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
167
167
 
168
168
  ## Управление таймерами
169
169
 
@@ -195,7 +195,7 @@ callbac должен быть функцией вида:
195
195
  >
196
196
  > ...
197
197
 
198
- в параметр **name** передается в имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
198
+ в параметр **name** передается имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
199
199
 
200
200
  Предусмотрены следующие типы интервалов работы таймера:
201
201
 
@@ -205,7 +205,7 @@ callbac должен быть функцией вида:
205
205
  * TimerInterval.HOUR
206
206
  * TimerInterval.DAY
207
207
 
208
- Для управления таймерами, также, используются:
208
+ Для управления таймерами, также, используются методы:
209
209
 
210
210
  * **start**(immediately_start=True) - запускает таймер, если он остановлен. Если immediately_start=False, то таймер ждет свой
211
211
  интервал и только потом запускает callback, иначе callback будет запущен сразу после вызова start()
@@ -263,7 +263,7 @@ if __name__ == '__main__':
263
263
  - code: ERROR # код для вызова из функции raise_error
264
264
  http: 444 # код для возврата для HTTP. можно не указывать
265
265
  msg: В {place} у объекта {name} случилось {what} # Сообщение в которое будут подставлены kwargs из raise_error
266
- class: Error # задает класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было нре указывать)
266
+ class: Error # задаёт класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было не указывать)
267
267
  - code: OTHER_ERROR
268
268
  class: Exception
269
269
  msg: Еще ошибка
@@ -359,6 +359,7 @@ logging:
359
359
  ## Доступ к БД
360
360
 
361
361
  Библиотека поддерживает хранение настроек соединений и выполнение команд SQL на этих соединениях с БД.
362
+
362
363
  Из коробки реализованы драйвер Postgresql, Sqlite и Valkey (Redis). Также реализован драйвер Mysql но для его работы дополнительно надо установить зависимость mysql-connector-python.
363
364
 
364
365
  Можно описывать драйвера к другим БД. Для того чтобы использовать собственный драйвер, можно добавить класс драйвера
@@ -408,7 +409,7 @@ database: postgresql://localhost:5432/postgres?user=postgres&password=postgres
408
409
  ```toml
409
410
  [database]
410
411
  test = "postgresql://localhost:5432/test?user=postgres&password=postgres"
411
- mydb = "postgresql://localhost:5432/mydb?user=postgres&password=postgres"
412
+ mydb = "postgresql://postgres:postgres@localhost:5432/mydb"
412
413
 
413
414
  [defaults]
414
415
  database = "test"
@@ -431,7 +432,7 @@ database = "test"
431
432
  который ограничит максимальное количество таких соединений. Т.е. по достижении данного числа соединений система
432
433
  не станет выполнять очередную команду до тех пор, пока не освободится одно из текущих соединений с БД.
433
434
 
434
- Для некоторых драйверов, например, для встроенного драйвера posstgresql строка сооединения с БД
435
+ Для некоторых драйверов, например, для встроенного драйвера postgresql строка сооединения с БД
435
436
  может иметь альтернативную структуру:
436
437
 
437
438
  <имя_драйвера>**://**<имя пользователя>**:**<пароль>**@**<адрес сервера>**:**<номер порта>**/**<имя БД>**?**<параметры соединения>**{**дополнительные параметры**}**
@@ -602,6 +603,7 @@ inner join t2 on t2.t_id=t.id and t2.name=$name
602
603
  where t.date < now()::date;
603
604
  ```
604
605
  система автоматически создает подстроку со значением параметра и, при необходимости, заключает это значение в кавычки.
606
+
605
607
  |**Тип python**|**Тип БД**|**В кавычках**|
606
608
  |--------|---------|-----|
607
609
  | None | NULL | [ ] |
@@ -671,6 +673,7 @@ async def sql(query:str, *args, **kwargs):
671
673
 
672
674
  Опции, это специальные параметры, которые влияют на выполнение запроса в целом.
673
675
  Передавать опции можно только в конце списка args, после позиционных параметров, либо вместо них.
676
+
674
677
  В библиотеке реализованы следующие опции:
675
678
  * DB - служит для передачи соединения в функцию sql. Передается как DB("строка соединения").
676
679
  * NOTICE - то же, что DB, но запросы с такой опцией возвращают как результат список сообщений нотификации
File without changes
File without changes