如何从单个查询中检查多个日期的冲突

How to check conflicts on multiple dates from a single query

我正在开发一个预订系统(在 Python-web2py 中),我正在尝试优化我的代码。问题是我有多个日期(超过 50 个),我需要列出每个日期的冲突。在循环中执行此操作非常耗时,因此我正在寻找可以执行此操作的查询。有什么想法吗? 当前用于检查冲突的子句是:

((db.booking.booking_end > booking_start_utc) & (db.booking.booking_start < booking_end_utc))

假设您有一个开始时间列表和一个相关结束时间列表,您可以构造一个包含所有 start/end 时间的查询:

times = zip(start_times, end_times)
query = reduce(lambda a, b: a | b,
               [(db.booking.booking_end > start) &
                (db.booking.booking_start < end) for start, end in times])
conflicts = db(query).select()

以上将产生如下查询:

((db.booking.booking_end > s1) & (db.booking.booking_start < e1)) |
((db.booking.booking_end > s2) & (db.booking.booking_start < e2)) |
...
((db.booking.booking_end > s50) & (db.booking.booking_start < e50))