Запрос SQLite генерирует синтаксическую ошибку в коде, но отлично работает при копировании в браузер sqlite db - PullRequest
0 голосов
/ 19 сентября 2019

Решение: У меня установлена ​​устаревшая версия 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)

1 Ответ

0 голосов
/ 19 сентября 2019

Дайте это попробовать ... Я псевдоним каждого подзапроса.ui и uo.

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) ui
) uo WHERE username = 'someuser'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...