SQL запрос перевел в peewee, но выдает ошибку

Рейтинг: 0Ответов: 0Опубликовано: 13.06.2023

Я имею корректный SQL-запрос и вариант отбора WHERE, который берет текущую дату, отнимает дату начала подписки, и если прошло меньше 24 часов, то выводит. В нем использована функция julianday() для перевода в UNIX и вычисления числа с точкой.

WHERE f.user_id IS NOT NULL AND julianday() - julianday(f.date_start) <= 1

Вычисляет вот так:

введите сюда описание изображения

Я его перевел в разметку peewee:

current_time = datetime.datetime.utcnow()

((Free.user_id.is_null(False)) & (current_time - Free.date_start <= timedelta(days=1)))

Тип его:

<class 'peewee.Expression'>

В SQL он выглядит так:

(("t3"."user_id" IS NOT NULL) AND (('2023-06-13 05:21:51.712313' - "t3"."date_start") <= 1 day, 0:00:00)))

И эта строка WHERE выдает ошибку:

Traceback (most recent call last):
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 3246, in execute_sql
    cursor.execute(sql, params or ())
sqlite3.InterfaceError: Error binding parameter 6 - probably unsupported type.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Z:\Python\projects\tgbot\tgbot\database\query_functions.py", line 454, in <module>
    pprint(qu.get_free_user_matches())
  File "Z:\Python\projects\tgbot\tgbot\database\query_functions.py", line 426, in get_free_user_matches
    for row in query.dicts():
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 7107, in __iter__
    self.execute()
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 1966, in inner
    return method(self, database, *args, **kwargs)
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 2037, in execute
    return self._execute(database)
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 2210, in _execute
    cursor = database.execute(self)
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 3254, in execute
    return self.execute_sql(sql, params)
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 3244, in execute_sql
    with __exception_wrapper__:
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 3014, in __exit__
    reraise(new_type, new_type(exc_value, *exc_args), traceback)
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 192, in reraise
    raise value.with_traceback(tb)
  File "Z:\Python\projects\tgbot\venv\lib\site-packages\peewee.py", line 3246, in execute_sql
    cursor.execute(sql, params or ())
peewee.InterfaceError: Error binding parameter 6 - probably unsupported type.

Примерно скорей всего понимаю, что проблема в том, что sqlite3 не понимает тип данного вычисления <class 'peewee.Expression'>. И я не могу понять и найти решения, как сделать так же, как в классическим SQL с использованием julianday() и перевода даты в простое число с точкой, но уже в разметке peewee. Или просто найти решение с вычислением датами, без перевода их в UNIX формат.

Подскажите и помогите пожалуйста найти решение.

Ответы

Ответов пока нет.