Попробуйте вместо этого обработать PreviewKeyUp (или KeyUp). Если это не сработает, то ваше окно или код должно быть больше (обрабатываете ли вы другие экземпляры этих событий)?
''.join()
никоим образом не изменяет порядок. Если вы получили другой порядок, тогда запрос базы данных создал строки в другом порядке.
Я не думаю, что вы сообщаете базе данных, чтобы заказывать ваши результаты по дате. Вы заказываете по style112
, и база данных может свободно заказывать значения с одинаковым значением столбца style112
в любом порядке, который им нравится. Если style112
не содержит информацию о дате (как год, месяц, последовательность дней фиксированной длины) и порядок дат, сообщите базе данных о правильном порядке! Здесь это будет year, month, day
, по крайней мере, .
Я также реорганизую код, чтобы избежать квадратичного поведения производительности; выражение inset = inset + [....]
должно каждый раз создавать новый объект списка, копируя все элементы из inset
и новый список. При добавлении N элементов в список таким образом, Python должен выполнить N * N шагов. Для 1000 элементов это 1 миллион шагов для выполнения! Используйте list.append()
, чтобы добавить отдельные элементы, что уменьшит рабочую нагрузку до примерно N шагов.
Вы можете прокручивать курсор непосредственно над курсором; это более эффективно, так как он может буферизовать строки, здесь cursor.fetchone()
не может предположить, что вы получите больше данных. Цикл for row in cursor:
также более читабельен.
Вы также можете использовать форматирование строки , а не конкатенацию строк, это поможет избежать всех этих вызовов str()
и избыточности, поскольку а также дальнейшее снижение проблем с производительностью; все эти конкатенации строк также создают и воссоздают много промежуточных строковых объектов, которые вам вообще не нужно создавать.
Поэтому используйте это:
cnxn = pyodbc.connect(
'DRIVER={ODBC Driver 13 for SQL Server};SERVER=MYVM\SQLEXPRESS;'
'DATABASE=MyTables;UID=test;PWD=t')
cursor = cnxn.cursor()
cursor.execute('''
DECLARE @today as date
SET @today = GetDate()
SELECT
style112, day, month, year, dayofweek, showroom_name, isbusy
from ShowroomCal
where Date Between @today and dateadd(month,1,@today)
order by year, month, day, style112
''')
inset = []
for row in cursor:
inset.append(
'<div class="{r.isbusy}">'
'<a href="#" id="{r.style112}"'
' onclick="parent.updateField(field38, {r.style112});">'
'{r.day}</a></div>'.format(r=row))
with open(r"C:\tes.html") as template:
template = f.read()
html = template.format(inset=''.join(inset))
with open(r"C:\inetpub\wwwroot\cal\tes.html", 'w') as output:
output.write(html)
Примечание: если ваши данные в базе данных были введены вашими пользователями, вы должны убедиться, что данные правильно экранированы для включения в HTML в первую очередь , или вы оставите себя открытыми для XSS межсайтовые скриптовые атаки . Лично я использовал бы механизм шаблонов HTML с поддержкой escaping по умолчанию, например Jinja .
style112
является строкой в формате YYYYMMDD, тогда для этого достаточно should i>. – Martijn Pieters♦ 13 July 2018 в 11:04