У меня есть база данных tick_df
, которая выглядит так
timestamp time symbol price
0 1649320867903 2022-04-07 08:41:07.903000+00:00 LUNA/USD:USD 108.3220
1 1649320867884 2022-04-07 08:41:07.884000+00:00 SOL/USD:USD 115.9125
2 1649320867321 2022-04-07 08:41:07.321000+00:00 LUNA/USD:USD 108.3220
3 1649320866243 2022-04-07 08:41:06.243000+00:00 LUNA/USD:USD 108.3300
4 1649320866225 2022-04-07 08:41:06.225000+00:00 AVAX/USD:USD 84.6590
5 1649320866144 2022-04-07 08:41:06.144000+00:00 AVAX/USD:USD 84.6640
Я пытаюсь выбрать все столбцы и последние 2 строки в порядке убывания времени только из одного символа - например, AVAX/USD:USD. Запрос, который я пробовал,
SELECT symbol FROM tick_df WHERE symbol LIKE AVAX% ORDER BY timestamp DESC LIMIT2
Но это возвращает ошибку
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "ORDER": syntax error
может ли кто-нибудь указать, что я делаю неправильно здесь.
Спасибо
Если вы посмотрите на сообщение об ошибке, оно говорит вам, что рядом с ORDER BY
есть синтаксическая ошибка, оно намекает на ошибку непосредственно перед этим предложением.
Как вы можете прочитать из документация:
A string constant is formed by enclosing the string in single quotes (').
Вы должны заключить LIKE
arg в одинарные кавычки, как это
SELECT symbol FROM tick_df WHERE symbol LIKE 'AVAX%' ORDER BY timestamp DESC LIMIT 2
Кроме того, если вы хотите вернуть весь столбец, вы должны SELECT *
, а не SELECT symbol
, потому что последний вернет только столбец символов.
Окончательный правильный запрос должен быть
SELECT * FROM tick_df WHERE symbol LIKE 'AVAX%' ORDER BY timestamp DESC LIMIT 2
который хорошо работает, возвращая только символ столбца. Как я могу заставить его возвращать все столбцы базы данных, а не только символ?
Он возвращает только столбец символов, потому что вы задали его с помощью SELECT symbol
, если вы хотите вернуть все столбцы, которые вы должны использовать SELECT *
ваше здоровье. да я разобрался. db_name = "SELECT * FROM" + " " + ("tick_df") + " " + "WHERE symbol LIKE" + " " + "'%s'" % str(names[0] + "%") + " " + "ORDER BY timestamp DESC" + " " + "LIMIT" + " " + "2"
Вы должны заключить параметр
LIKE
в одинарные кавычки, попробуйте этоSELECT symbol FROM tick_df WHERE symbol LIKE 'AVAX%' ORDER BY timestamp DESC LIMIT 2