Объект DateRange в формате Python / SQLAlchemy - PullRequest
0 голосов
/ 27 августа 2018

Я использую тип столбца DateRange, чтобы сохранить бронирование для системы бронирования. Моя база данных - это PosgreSQL, и я использую Python 3 с Flask и SQLAlchemy.

Несмотря на то, что рекомендуется использовать DateRange, я даже не нахожу документацию или что-нибудь полезное о том, как работать с этими типами.

В документации SQLAlchemy написано только 2 предложения о существовании такого типа столбца.

Примечание здесь: Все ресурсы, которые я нахожу, показывают только то, что люди обычно используют дату начала и дату окончания. Мой подход с DateRange плох?

В настоящее время я успешно сохраняю некоторые диапазоны дат в БД. Теперь мне нужно передать все недоступные даты в представление в формате JSON, чтобы мой календарь мог использовать эти дни для их блокировки. Поэтому мне нужно построить подходящий формат. Поскольку datetime не сериализуем, мне нужно преобразовать его в строку.

Мои объекты диапазона дат выглядят так: atm .:

for bdate in room.RoomObject_addresses_UserBooksRoom:
    print (bdate.booked_date)

Выход:

DateRange(datetime.date(2018, 8, 1), datetime.date(2018, 8, 9), '[)')
DateRange(datetime.date(2018, 8, 1), datetime.date(2018, 8, 10), '[)')
DateRange(datetime.date(2018, 9, 7), datetime.date(2018, 9, 14), '[)')

Я хотел бы преобразовать их в списки или кортежи с этим форматом %Y-%m-%d, поэтому я бы получил такой вывод:

['2018-08-01','2018-08-09']

Я знаю, как это делается с datetime объектами, но здесь я понятия не имею, и, как упоминалось выше, я не смог найти больше информации по этой теме.

1 Ответ

0 голосов
/ 27 августа 2018

Документация SQLAlchemy намекает на то, что типы диапазонов являются функцией Psycopg, поэтому, посмотрев их документацию для рассматриваемых объектов , вы обнаружите, что Range объекты имеют атрибуты lower и upper, которые содержат границы. С ними легко составить список кортежей:

fmt = '%Y-%m-%d'
bookings = [(format(bdate.lower, fmt), format(bdate.upper, fmt))
            for bdate in room.RoomObject_addresses_UserBooksRoom]
...