Решение: У меня установлена устаревшая версия sqlite, которая не поддерживала RANK ().Я исправил это, установив Python3.7.4
Я пытаюсь найти положение пользователя, когда он сортируется в порядке убывания на основе суммы двух столбцов.Я проверил этот запрос в Браузере БД SQLite, и он вернул правильный результат, но когда я скопировал его в свой скрипт Python, он выдает синтаксическую ошибку в одном из «(»
Я попытался запустить код и остановитьперед выполнением запроса, так что я могу дословно скопировать запрос в браузер db. Когда я это делаю, он работает отлично, но когда я выполняю запрос в моем скрипте, он не работает
Вот простой текстзапрос, который возвращает конкатенация строк:
SELECT top_rank FROM (
SELECT username, RANK() OVER(ORDER BY summed DESC) AS 'top_rank'
FROM (
SELECT SUM(positive_qc) - SUM(negative_qc) AS 'summed', username
FROM sub_activity
WHERE sub_name IN('cryptocurrency', 'cryptomarkets', 'cryptotechnology', 'blockchain')
GROUP BY username)
) WHERE username = 'someuser'
Вот код, который я использую для получения этого запроса:
select_str = "SELECT top_rank FROM(" + \
"SELECT " + self.KEY2_USERNAME + ", RANK() OVER(ORDER BY summed DESC) AS 'top_rank' " \
"FROM(" \
"SELECT SUM(" + self.KEY2_POSITIVE_QC + ") - SUM(" + self.KEY2_NEGATIVE_QC + ") " \
"AS 'summed', " + self.KEY2_USERNAME + " " \
"FROM " + self.TABLE_SUB_ACTIVITY + " " \
"WHERE " + self.KEY2_SUB_NAME + " IN('" + "', '".join(sub_list) + "') " \
"GROUP BY " + self.KEY2_USERNAME + ")" \
") WHERE " + self.KEY2_USERNAME + " = ?"
Точная ошибка, которую я получаю при выполнении его в скрипте, составляет
sqlite3.OperationalError: near "(": syntax error
Обновление: Я сократил ошибку до части запроса RANK () OVER (ORDER BY summed DESC)