Python Glossary English

все 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Сообщить о неточности