Python Glossary English

все Python 3sqlite3понятие

sqlite3.PrepareProtocol

адаптеры и конвертеры

Класс-метка протокола адаптации: sqlite3 передаёт его в метод __conform__ объекта, спрашивая, во что тот хочет превратиться для SQLite.

Синтаксис

def __conform__(self, protocol): if protocol is sqlite3.PrepareProtocol: ...

Сам по себе ничего не делает — его сравнивают через is внутри __conform__: if protocol is sqlite3.PrepareProtocol. Это способ научить свой класс сохраняться в базу без глобального register_adapter, но если адаптер для класса всё же зарегистрирован, он побеждает и __conform__ не вызывается.

Примеры

import sqlite3
class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __conform__(self, protocol):
        if protocol is sqlite3.PrepareProtocol:
            return f'{self.x};{self.y}'
conn = sqlite3.connect(':memory:')
print(conn.execute('SELECT ?', (Point(1, 2),)).fetchone()[0])  # → 1;2
sqlite3.register_adapter(Point, lambda p: 'адаптер')
print(conn.execute('SELECT ?', (Point(1, 2),)).fetchone()[0])  # → адаптер — он важнее __conform__
conn.close()

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности