Сообщить об ошибке.

Функция register_converter() модуля sqlite3 в Python

Конвертер из типов sqlite3 в типы Python

Синтаксис:

import sqlite3

sqlite3.register_converter(typename, callable)

Параметры:

  • typename - тип данных базы данных,
  • callable - вызываемый объект.

Возвращаемое значение:

  • нет.

Описание:

Функция register_converter() модуля sqlite3 регистрирует вызываемый объект callable для преобразования строки байтов из базы данных в пользовательский тип Python.

Вызываемый объект callable будет вызываться для всех значений базы данных, имеющих тип typename.

Присвойте аргументу detect_types функции sqlite3.connect() информацию о том, как работает определение типа.

Обратите внимание, что typename и имя типа в запросе сопоставляются без учета регистра.

Примеры:

import sqlite3

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __repr__(self):
        return "(%f;%f)" % (self.x, self.y)

def adapt_point(point):
    return ("%f;%f" % (point.x, point.y)).encode('ascii')

def convert_point(s):
    x, y = list(map(float, s.split(b";")))
    return Point(x, y)

# регистрируем адаптер
sqlite3.register_adapter(Point, adapt_point)

# регистрируем конвертер
sqlite3.register_converter("point", convert_point)

p = Point(4.0, -3.2)

#########################
# 1) Использование объявленных типов
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.cursor()
cur.execute("create table test(p point)")

cur.execute("insert into test(p) values (?)", (p,))
cur.execute("select p from test")
print("with declared types:", cur.fetchone()[0])
cur.close()
con.close()

#######################
# 1) Использование имен столбцов
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
cur = con.cursor()
cur.execute("create table test(p)")

cur.execute("insert into test(p) values (?)", (p,))
cur.execute('select p as "p [point]" from test')
print("with column names:", cur.fetchone()[0])
cur.close()
con.close()