#python #sql #pandas #sqlalchemy
Вопрос:
У меня есть очень простой SQL-запрос с оператором WHERE. Правильный результат, как показано ниже.
SELECT title, release_year, gross
FROM films
WHERE (release_year >= 1990 AND release_year < 2000)
AND (language = 'French' OR language = 'Spanish')
AND gross > 2000000
title release_year gross
El Mariachi 1992 2040920
The Red Violin 1998 9473382
Однако, когда я побежал
pd.read_sql_query('''SELECT title, release_year, gross
FROM films
WHERE (release_year >= '1990' AND release_year < '2000')
AND (language = 'French' OR language = 'Spanish')
AND gross > '2000000';''', engine)
Результат был неверным
title release_year gross
0 El Mariachi 1992 2040920
1 Les visiteurs 1993 700000
2 The Chambermaid on the Titanic 1997 244465
3 The Swindle 1997 231417
4 La otra conquista 1998 886410
5 The Red Violin 1998 9473382
''
Окружающее число, по-видимому, имеет значение pd.read_sql_query()
. Это кажется прекрасным при сравнении небольших значений (например, лет) или использовании точного значения =
.
У кого-нибудь есть какие-нибудь предложения по решению этой проблемы? Я хочу, чтобы запрос pd.read_sql_ возвращал правильные данные.
Большое спасибо!
@Бармар
В pd.read_sql_query()
, крайне важно, чтобы число было заключено в одинарные кавычки. Вот что происходит, когда я pd.read_sql_query
так бегаю
pd.read_sql_query('''SELECT title, release_year FROM films WHERE release_year >= 1990 ''', engine)
Результаты включают неправильные годы, если у вас нет знака одинарной кавычки вокруг лет
title release_year
0 Intolerance: Love's Struggle Throughout the Ages 1916
1 Over the Hill to the Poorhouse 1920
2 The Big Parade 1925
3 Metropolis 1927
Комментарии:
1. Не заключайте числа в кавычки.
2. Почему вы делаете это в SQLAlchemy, когда вы не делаете этого в обычном SQL?
3. Номер в pd.read_sql_query должен быть заключен в кавычки. В противном случае это вообще не сработает.
4. В этом нет никакого смысла. Причина неправильного результата в том, что он выполняет сравнение строк вместо числового сравнения.
5. Как они хранятся
release_year
иgross
хранятся в вашей базе данных? Какой это тип данных? Я предполагаю, чтоrelease_year
это символ иgross
является числовым.