sqlite3.OperationalError: Пользовательская функция вызвала исключение - PullRequest
0 голосов
/ 01 апреля 2020

Попытка получить md5sum поля таблицы в sqlite3 с помощью пользовательской функции.

[Edit] Приведенный ниже код был опробован после прочтения документации по https://docs.python.org/3/library/sqlite3.html#sqlite3 .Connection.create_function

Вкл. python 3.8, следующий код выдает sqlite3.OperationalError: user-defined function raised exception

Как это исправить?

import sqlite3
import hashlib


def md5sum(text):
    return hashlib.md5(text).hexdigest()


with sqlite3.connect(":memory:") as conn:
    conn.executescript("""
        CREATE TABLE project(name);
        INSERT INTO project(name) VALUES ('test');
    """)
    conn.create_function("md5", 1, md5sum)
    cursor = conn.cursor()
    # cursor.execute("SELECT name from project")
    cursor.execute("SELECT md5(name) from project") # Throws error
    print(cursor.fetchone()[0])

1 Ответ

0 голосов
/ 01 апреля 2020

Обратите внимание на пример из do c, который отправляет b"foo" функции (см. этот пост для получения дополнительной информации). Попробуйте использовать name как BLOB в SELECT и посмотрите, не изменит ли это результат. ie md5(CAST (name as BLOB))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...