nosemka
@nosemka
Middle Python Developer

Как исправить ошибку ValueError: time data «('2021-11-20',)» does not match format '%y-%m-%d'?

Пытаюсь дату с базы данных преобразовать в строку для того чтобы их сравнить ">="
Выдаёт такую ошибку
619be50211fa0954816448.png

Код:
@tasks.loop(seconds=2.0)
async def ban_loop():
	getdatanow = datetime.now().date()
	for ban in sql.execute(F"SELECT days FROM bans"):
		getdays = str(ban)
		ban1 = datetime.strptime(getdays, "%y-%m-%d")
		if getdatanow >= ban1:
			sql.execute(f"UPDATE bans SET ex = 'True'")
			for bans in sql.execute(f"SELECT FROM bans WHERE ex = 'True'"):
				if getdatanow > bans[2]:
					guild = client.get_guild(806633419865718784)
					await guild.unban(getallbannedid[4])
					print(getallbannedid[4])
					sql.execute(f"DELETE FROM bans WHERE banned = {bans[0]}")
					db.commit()
					print('Пользователь разбанен по истечению длительности наказания')


База данных bans
619be53824656637852534.png

Как записывается строка:
619be54a2157d684259400.png

На ex не смотрите, это никакого отношения не имеет.
  • Вопрос задан
  • 2248 просмотров
Решения вопроса 1
SoreMix
@SoreMix
yellow
Не надо делать так getdays = str(ban). Вам запрос к БД отдает кортеж данных, вместо получения элемента этого кортежа, зачем-то превращаете его в строку, и получается это (строка) ('2021-11-20', ).
Вы пытаетесь эту строку распаристь по формату "год-месяц-день", в то время как у вас строка выглядит как "скобкакавычка-год-месяц-денькавычказапятаяскобка", не совпадает так сказать.

Плюс, неверные типы использовали. читшит, листаем до "Format Code List"

ban1 = datetime.strptime(ban[0], "%Y-%m-%d")
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@galaxy
datetime.strptime(getdays, "%Y-%m-%d")
(%y -> %Y, если непонятно)
Ответ написан
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Может быть стоит извлечь значение из tuple прежде чем в строку а потом в дату переводить?
...
getdays = ban[0]
ban1 = datetime.strptime(getdays, "%Y-%m-%d")
...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы