How to use DateTimeRange Field with Wtforms‐alchemy and sqlalchemy - MUMT-IT/mis2018 GitHub Wiki

Model

For the model, use DateTimeRangeType from sqlalchemy_utils package for a column. To enter data to the field, use DateTimeRange from psycopg2.extras package.

from sqlalchemy_utils import DateTimeRangeType

class Event(db.Model):
    datetime = db.Column(DateTimeRangeType)
from psycopg2.extras import DateTimeRange

start = arrow.get(form.start.data).datetime
end = arrow.get(form.end.data).datetime

event.datetime = DateTimeRange(lower=start, upper=end, bounds='[]')

Note that it is unsure whether timezone needs to be specified in arrow function.

To find overlapping events, use this:


overlaps = query.filter(RoomEvent.datetime.op('&&')(DateTimeRange(lower=start, upper=end, bounds='[]'))).all()