Вы используете repr()
для преобразования объекта в строку.Этот метод не предназначен для случая использования, к которому вы применяете его;он дает информацию о внутреннем представлении базового объекта.
Что вы действительно хотите сделать, это отформатировать вашу метку времени, чтобы сделать ее строкой, которая соответствует вашим потребностям.Как и обычные объекты Python Datetime
, объекты pandas
'Timestamp
также имеют метод с именем strftime()
, используемый для форматирования строк.
# This part is just to create a MWE; it mimics your dataframe that we
# do not have at hand here.
df = pandas.DataFrame({
'BEG_DT': [
pandas.Timestamp('2018-04-29'),
pandas.Timestamp('2019-04-22')]
})
# This is what you did
begdtlist = df['BEG_DT'].tolist()
print(begdtlist)
# This is how you can format the date according to your needs
for dt in begdtlist:
print(dt.strftime('%Y-%m-%d'))
Это создает следующий вывод:
[Timestamp('2018-04-29 00:00:00'), Timestamp('2019-04-22 00:00:00')]
2018-04-29
2019-04-22
Вы видите, что форматирование создало строки даты, необходимые для генерации SQL-запроса в строках 2 и 3. Вы можете прочитать о опциях форматирования в официальных документах Python .
Кстати, совершенно нормально, что pandas
преобразует ваши даты в свои собственные Timestamp
объекты, потому что им требуются интерфейсы для DataFrame
взаимодействия и агрегации и т. Д., Которых нет в обычном питоне Date
или Datetime
объектов.
Тем не менее, вы не можете использовать список в вашем запросе SQL, потому что он сгенерирует неверный синтаксис:
SELECT calndr_dt, wk_of_mnth
FROM databasename
WHERE calendr_dt = CAST 2018-04-29, 2018-04-22 AS DATE
^
this will be your syntax error
Ваш подходВ некоторых случаях есть недостатки:
- Вы пытаетесь подключить список к одному вызову
CAST
, что не удастся - Вы проверяете равенство столбца массиву,который потерпит неудачу
Таким образом, вы также можете прочитать синтаксис SQL и сгенерировать пример запроса перед тем, как попытаться подключить значения через python.
It может выглядеть так ( не проверено - используйте с осторожностью ):
sql = '''
SELECT calndr_dt, wk_of_mnth
FROM databasename
WHERE calendr_dt IN [{:s}]
'''.format(', '.join(
[
'\'{:s}\'::DATE'.format(dt.strftime('%Y-%m-%d'))
for dt in begdtlist
]
))
Что приводит к:
SELECT calndr_dt, wk_of_mnth
FROM databasename
WHERE calendr_dt IN ['2018-04-29'::DATE, '2019-04-22'::DATE]