我正在尝试搜索数据库中的明天日期,然后进入电子邮件功能。
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()
我的问题是它到达row = cursor.fetchall()[0]然后停止。 我该如何解决这个问题?
答案 0 :(得分:0)
它没有"停止",它在下一行上达到if条件,因为它永远不会成立,它会一直持续到最后。
fetchall()
将为您提供一个元组列表,这是一个列表,列出了每一行都是所有列的元组的所有行。因此,您的[0]
索引实际上为您提供了一个包含单个元素的元组,即数据列。但str(row)
类似('2015-04-29',)
,不等于'2015-04-29'
。
您需要迭代来自fetchall()
的结果,并检查每一行。
然而,由于您有更深的逻辑错误,仍然无法解决您的问题。您选择DateIn等于明天的行。但是你检查DateIn是否等于今天。再一次,这永远不会成真。
答案 1 :(得分:-1)
cursor.execute(" SELECT DateIn FROM MusicLoan WHERE DateIn =?",(明天))
并使用fetch one method cursor.fetchone()