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