我正在编写一个简单的脚本来检查用户帐户是否即将过期。我遇到了一个更新查询的问题-它基本上不更新。我在互联网上找到的所有例子似乎都使用元组来更新行,但是我的例子要求参数彼此分开。在
我对Python完全陌生(我从昨天开始的)。我的数据库是MySQL(web上几乎所有的例子都使用SQLite),我不能改变它。我使用Python3,服务器运行在Ubuntu18.04上。我尝试用替换%s?或:变量。我也尝试过不安全的方法(SQL注入易受攻击),但也没用。在
这是我当前的代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import mysql.connector
from mysql.connector import Error
import datetime
try:
mydb = mysql.connector.connect(
host="localhost",
user="rootery-root",
passwd="example",
database="playground"
)
sqlCursor = mydb.cursor()
sqlCursor.execute("SELECT id, email, last_email_date FROM users WHERE soon_expires = 1")
sqlResult = sqlCursor.fetchall()
setLastMailCmd = """UPDATE users SET last_email_date =%s WHERE id =%s"""
today = datetime.date.today()
for i in range(0, len(sqlResult)):
id = sqlResult[i][0]
email = sqlResult[i][1]
lastemaildate = sqlResult[i][2]
daydiff = lastemaildate - today
setLastMail = sqlCursor.execute(setLastMailCmd, (id, today))
if daydiff.days >= 30:
print "Sending mail and updating \"last_email_date\"."
setLastMail
else:
print "%s already received an e-mail this month - ignored." % email
setLastMail # debugging purposes
except mysql.connector.Error as error:
print("SQL connection error.".format(error))
finally:
if (mydb.is_connected()):
sqlCursor.close()
mydb.close()
print("Disconnected from database.")
print(today)
我希望它用for
循环提供的数据更新我的表,但是它根本不做任何事情。在
尝试更多地使用函数。你把所有的东西放在一个地方,不容易调试。在
你的问题是你使用
setLastMail # debugging purposes
的方式。它什么也没做。在最好是:
然后执行
set_last_email(id)
。在记住要使游标全局化,否则它在函数中不可用。或者直接从全局连接中获取。在
这当然是一个虚拟的例子,但你需要从某个地方开始:)
相关问题 更多 >
编程相关推荐