Токен аутентификации Firebase недействителен

''.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(
        ''.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 .

0
задан Kalp 19 January 2019 в 17:35
поделиться