все Python 3sqlite3функция
sqlite3.register_adapter()
адаптеры и конвертеры
Регистрирует функцию, которая превращает объект вашего типа в значение, понятное SQLite (int, float, str, bytes, None), при подстановке в запрос.
Синтаксис
sqlite3.register_adapter(type, adapter, /)
Без адаптера Decimal или свой класс в параметрах дают ProgrammingError «type ... is not supported». Регистрация глобальная — на весь процесс, а не на одно соединение. Встроенные адаптеры для date и datetime с 3.12 устарели и выдают DeprecationWarning: для дат регистрируйте свой, например date.isoformat. Обратное превращение при чтении делает register_converter.
Примеры
# Python 3.11+
import sqlite3
from decimal import Decimal
conn = sqlite3.connect(':memory:')
try:
conn.execute('SELECT ?', (Decimal('1.10'),))
except sqlite3.ProgrammingError as e:
print(e) # → is not supported — имя типа в тексте: 'decimal.Decimal', с 3.15 'Decimal'
sqlite3.register_adapter(Decimal, str)
print(conn.execute('SELECT ?, typeof(?)', (Decimal('1.10'),) * 2).fetchone()) # → ('1.10', 'text')
conn.close()
import datetime
import sqlite3
sqlite3.register_adapter(datetime.date, datetime.date.isoformat)
conn = sqlite3.connect(':memory:')
print(conn.execute('SELECT ?', (datetime.date(2024, 5, 1),)).fetchone()) # → ('2024-05-01',) — без DeprecationWarning
conn.close()
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности