Использование ROW_NUMBER() во вложенном запросе sqlite3 с sqlalchemy вызывает sqlite3.Ошибка OperationalError: рядом с «(«: синтаксическая ошибка

#python #sqlite #sqlalchemy

#python #sqlite #sqlalchemy

Вопрос:

При выполнении следующей функции python для запуска sql-запроса к базе данных sqlite3 я получаю sqlite3.OperationalError: near "(": syntax error

функция python с текстом запроса

 def total_docs():
"total documents"
   import db
   conn, cursor = db.opendb()
   cursor.execute('''
   SELECT COUNT(a.custId) 
   FROM (
   SELECT 
    ROW_NUMBER () OVER (
      PARTITION BY custId, invoiceId ORDER BY entryDate DESC
    ) latest_rank , custId, customer, page, invoiceDate
   FROM 
   transactions
   ) a 
   WHERE latest_rank = 1
   ''')
   return cursor.fetchone()[0]
  

Есть ли что-то в том, как execute() выполняется этот запрос или сам запрос, который не совместим с использованием sqlalchemy для выполнения SQL. Запрос работает, как ожидалось, в клиенте DB (Dbeaver), и поэтому я немного озадачен тем, почему это не работает.

Комментарии:

1. Вероятно, вы используете старую версию sqlite, которая не поддерживает оконные функции. Убедитесь, что вы используете версию 3.25 или новее.

2. @Shawn вот и все! Спасибо.