sqlite中的日期搜索不起作用

2024-03-28 22:19:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试图搜索一个数据库的明日日期,然后进行电子邮件功能。你知道吗

def send_email():
currentdate = time.strftime("%d/%m/%Y")
nextday = datetime.date.today() + datetime.timedelta(days=1)
tomorrow = str(nextday.strftime("%d %m %Y"))
with sqlite3.connect("school.db") as db:
    cursor = db.cursor()
    cursor.execute("SELECT DateIn FROM MusicLoan WHERE DateIn = ?",(tomorrow,))
    row = cursor.fetchall()[0]
    if str(row) == str(tomorrow):
        cursor.execute("SELECT StudentID FROM MusicLoan WHERE DateIn = ?", (currentdate))
        ID = cursor.fetcone()[0]
        cursor.execute("SELECT email FROM Student WHERE StudentID = ?",(ID))
        email = cursor.fetchone()[0]
        fromaddr = email
        toaddr = "danielarif@blueyonder.co.uk"
        msg = MIMEMultipart()
        msg['From'] = fromaddr
        msg['To'] = toaddr
        msg['Subject'] = "Music Reminder"
        body = "A reminder that your music is due in tomorrow"
        msg.attach(MIMEText(body, 'plain'))
        try:
            server = smtplib.SMTP('smtp.gmail.com', 587)
            server.ehlo()
            server.set_debuglevel(1)
            server.starttls()
            server.ehlo()
            server.login("danielarif123@gmail.com", "DanR0bJ0nes3")
            text = msg.as_string()
            server.sendmail(fromaddr, toaddr, text)
            server.quit()
            print("Email Sent Successfully")
            send_email()
        except smtplib.SMTPException:
            print ("Error: unable to send email")
            send_email()

我的问题是它到达行=游标.fetchall()[0],然后停止。 我该怎么解决这个问题


Tags: fromsendexecutedbserveremailmsgwhere
2条回答

你知道吗游标.执行(“从MusicLoan中选择DateIn,其中DateIn=?”(明天)

并使用一种方法游标.fetchone()

有关更多示例,请参阅https://docs.python.org/2/library/sqlite3.html

它不会“停止”,它会到达下一行的if条件,因为这永远不可能是真的,所以它会一直到最后。你知道吗

fetchall()将为您提供一个元组列表,即匹配的所有行的列表,其中每行是所有列的元组。因此,您的[0]索引实际上为您提供了一个元组,其中包含一个元素,即数据列。但是str(row)将类似于('2015-04-29',),它不等于'2015-04-29'。你知道吗

您需要对来自fetchall()的结果进行迭代,并检查每一行。你知道吗

然而,这仍然不能解决您的问题,因为您有一个更深层次的逻辑错误。选择DateIn等于明天的行。但是你要检查DateIn是否等于今天。再说一次,这不可能是真的。你知道吗

相关问题 更多 >