如何解决将str转换为datetime并从db获取所有数据
我试图制作一个task.loop()来检查需要取消静音的静音用户,但是这样做有一些问题,由于某些原因,我不能使用fetchall(),因为它会给我这个错误
toremove = muteremove[2]
IndexError: list index out of range
如果我使用fetchone()也许每10秒仅获取1个用户,我的意思是如何每10秒获取所有数据以取消静音?
另外,如果我使用fetchone()会说can't convert str into datetime.datetime object
,我该如何解决?
@tasks.loop(seconds=10)
async def muted_user_check(self):
self.cur.execute(f"SELECT userId,guildId,expiredAt FROM mutedlist")
muteremove = self.cur.fetchall()
if muteremove is None:
print("No user to unmute :D")
if muteremove is not None:
toremove = muteremove[2]
timenow = datetime.utcnow()
if timenow > toremove:
self.cur.execute(f"DELETE FROM mutedlist WHERE guildId = {muteremove[1]} and userId = {muteremove[0]}")
解决方法
要将字符串转换为日期时间对象,可以使用strptime()
方法:
from datetime import datetime
def convert(date,format):
return datetime.strptime(date,format)
[input] convert('22/08/2020','%d/%m/%Y')
[output] 2020-08-22 00:00:00
输出将是一个日期时间对象,您可以使用strftime()
方法设置其格式,如下所示:
#Example
from datetime import datetime
now = datetime.now() #now will be a datetime object
now.strftime('%d/%m/%Y - %H:%M:%S') # DD/MM/YYYY - hours:minutes:seconds
以下是一些格式的列表:
- %A→工作日(%a为缩写,%w为数字)
- %-d→安装日期(1、2、3、4,...)
- %B→Mounth名称(%b代表缩写,%-m代表数字)
- %I→小时(12小时制)
- %p→AM或PM
- %H→小时(24小时制)
- %M→分钟
- %S→秒
- %f→微秒
- %c→本地日期和时间表示
使用您的代码,它将是:
@tasks.loop(seconds=10)
async def muted_user_check(self):
self.cur.execute(f"SELECT * FROM mutedlist")
mute_list = self.cur.fetchall()
if not mute_list:
print("No user to unmute :D")
else:
timeNow = datetime.utcnow()
for mute in mute_list:
muteExpire = datetime.strptime(mute[3],'%Y-%m-%d %H:%M:%S')
if timeNow > muteExpire :
self.cur.execute(f"DELETE FROM mutedlist WHERE guildId=? AND userId=?",(mute[0],mute[1]))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。