Почему мой sqlalchemy "где" запрос не разбирает дату? - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь использовать sqlalchemy для запроса select с предложением where на основе даты, но дата не анализируется в операторе запроса. Есть предложения, почему?

Некоторый импорт.

import sqlalchemy as sq
from datetime import datetime

Подключиться к базе данных и извлечь информацию о таблице ...

# Connect to the database
engine = sq.create_engine('sqlite:///C:/Blah/Blah/sqlite_file.db')
metadata = sq.MetaData(engine)

# Access the table.
table = sq.Table('customers', metadata, autoload=True, autoload_with=engine)
print(repr(customer_table))
Table('customers', MetaData(bind=Engine(sqlite:///C:/Blah/Blah/sqlite_file.db)), 
Column('customer_id', BIGINT(), table=<customers>), 
Column('cluster_num', INTEGER(), table=<customers>), 
Column('product', TEXT(), table=<customers>), 
Column('start_month', DATE(), table=<customers>)), schema=None)

Итак, мы видим, что столбец start_month записывается как дата. Для информации, каждая дата в таблице является первым днем ​​соответствующего месяца.

Определите интересующую меня дату открытия счета как в виде строки, так и в качестве объекта datetime.datetime ...

date_str = '2015-01-01'
date_dt = datetime.strptime(date_str, '%Y-%m-%d')

Составьте мой запрос, сначала используя sql, и две попытки sqlalchemy.

q = "SELECT customer_id, product FROM customers WHERE start_month = '{}'".format(date_str)
stmt = sq.select([table.columns.customer_id, table.columns.product])
stmt_str = stmt.where(table.columns.start_month == date_str)
stmt_dt = stmt.where(table.columns.start_month == date_dt)

sql работает.

print(q)
SELECT customer_id, product FROM customers WHERE start_month = '2015-01-01'

Но ни один из двух методов sqlalchemy не работает.

print(stmt_str)
SELECT customers.customer_id, customers.product 
FROM customers 
WHERE customers.start_month = ?


print(stmt_dt)
SELECT customers.customer_id, customers.product 
FROM customers 
WHERE customers.start_month = ?

Как видите, дата анализируется как "?" а не как дата, которую я хочу.

Пока я в порядке, используя метод строки sql, но есть ли у кого-нибудь объяснение, почему я не могу указать дату в предложении where с использованием синтаксиса sqlalchemy?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...