Несколько способов сделать его более эффективным, Pythonic:
set()
, так как алгоритм должен исключать дубликаты во время основного цикла. yield
для генерации значений. tuple()
в точку, где создаются окончательные значения, избавляя вас от необходимости создавать и выбрасывать дополнительные кортежи, и повторно использовать список saved
для хранения текущий временной диапазон для сравнения. Код:
def merge(times):
saved = list(times[0])
for st, en in sorted([sorted(t) for t in times]):
if st <= saved[1]:
saved[1] = max(saved[1], en)
else:
yield tuple(saved)
saved[0] = st
saved[1] = en
yield tuple(saved)
data = [
[(1, 5), (2, 4), (3, 6)],
[(1, 3), (2, 4), (5, 8)]
]
for times in data:
print list(merge(times))
"SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) WHERE dbo.tb_calendar_calEvents.calendarID = 'theCalID'"
должно быть
"SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) WHERE dbo.tb_calendar_calEvents.calendarID = :theCalID"
= 'theCalID' следует записать как =: theCalId; : theCalId - это то, как вы используете именованные параметры даже в собственных SQL-запросах.
Вы должны удалить вызов query.ExecuteUpdate ()
.
Выполнения query.List ()
достаточно, чтобы выполнить запрос в сеансе и вернуть набор результатов.