Я пытаюсь использовать 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?