ГДЕ в SQLAlchemy не возвращает правильное значение

#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 является числовым.