Python Ошибка значения strptime, пока все выглядит правильно - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть функция, которая должна получить дату, которую я ввожу в поле ввода, и использовать ее для вычисления некоторых данных в этом диапазоне, например: от гггг-мм-дд до гггг-мм-дд

Данные, которые я ввел, я использовал этот формат для всего YYYY-MM-DD (в базе данных SQLITE, функция, которая у меня есть, а также поле ввода) здесь я поделюсь функцией, которая вызывает ошибку.

Но все же я вернуть эту ошибку:

    raise ValueError("time data %r does not match format %r" %
ValueError: time data '' does not match format '%Y-%m-%d'
  def weekly_cal():
        connect = sqlite3.connect('working_time_app.db')
        cursor = connect.cursor()
        #fnishing i know it have a misspelling but this way should have no problem because i made that mistake
        #when i created the database and then was lazy to fix it so now this will be correct one
        cursor.execute("SELECT sum(fnishing - starting) FROM working_time_app_table WHERE date BETWEEN ? and ?",
                       ((datetime.strptime(d_u_entry, "%Y-%m-%d")), (datetime.strptime(d_f_entry, "%Y-%m-%d"))))
        #d_u_entry and d_f_entry are the variables which hold the value of my entrybox

        sum_result = cursor.fetchall()


        show_weekly_cal_label = Label(cal_win, text=sum_result, font=("mv boli", 12), fg="white", bg="black")
        show_weekly_cal_label.grid(column=3, row=15, columnspan=5)



        connect.commit()
        connect.close()

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Если working_time_app_table.date хранится в базе данных в виде строки в формате «ГГГГ-ММ-ДД», то параметры, отправляемые на WHERE date between ? and ?, должны быть строками.

strptime преобразует записи в python объект даты / времени. Поскольку введенные данные уже являются строкой в ​​формате «ГГГГ-ММ-ДД», преобразование во что-либо не требуется.

0 голосов
/ 23 февраля 2020

Спасибо за все ваши предложения, особенно те, кто предложил отладку. Я сделал отладку, это был огромный стресс, но в конце концов я нашел свою ошибку !!!!

Ошибка не связана с ошибками или типом данных. Проблема была в неправильном расположении переменной d_u_entry и переменной d_f_entry. здесь я опубликую снова правильную форму кода. Еще раз спасибо за всех вас и ваше время, которое вы вложили в помощь мне. Также извините за беспокойство всех вас !!!!

enter code here

  cursor.execute("SELECT total(finishing - starting) FROM working_time_app_table WHERE date BETWEEN ? and ?",
                   (d_f_entry, d_u_entry))

Проблема была в том, что я вводил дату окончания перед началом !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...