我正在研究我的BAC项目。我想从我的MySQL数据库查询时间。这个时间是我的数据库,我想将它与实时进行比较。我从Python语言开始......
[这是我的数据库] [https://i.stack.imgur.com/ROxnQ.png]
这是我的代码,但我有一个错误" TypeError:无法将datetime.time与元组进行比较"
import RPi.GPIO as GPIO
import time
import datetime
import MySQLdb
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)
GPIO.setup(38, GPIO.OUT)
db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="root", # your username
passwd="Orel_27130", # your password
db="projet") # name of the data base
while True:
now = datetime.datetime.time(datetime.datetime.now())
print (now)
print time.strftime("%H:%M:%S")
cursor = db.cursor()
cursor.execute("SELECT time_open FROM time WHERE id = 2")
time_open = cursor.fetchall()
print time_open
if time_open < now:
print ("Fermee")
GPIO.output(38, False)
GPIO.output(40, True)
else:
print ("Ouvert")
GPIO.output(38, True)
GPIO.output(40, False)
输出:
((datetime.datetime(2017, 1, 23, 13, 0),),)
Traceback (most recent call last):
File "mysql.py", line 27, in <module>
if time_open < now:
TypeError: can't compare datetime.time to tuple
答案 0 :(得分:4)
您从数据库中获取所有行。这些行存储在元组中,每行都是列的元组。如果要比较行中的第一列(也是唯一一列),则需要提取该列:
time_open = cursor.fetchone()
if time_open[0] < now:
我使用cursor.fetchone()
仅获取第一个结果行。
您还需要删除datetime.datetime.time()
来电:
now = datetime.datetime.now()
你想要datetime
对象,和日期,因为这也是MySQL返回的对象类型。
请注意,我假设time_open[0]
是datetime.datetime
个对象。您的回溯在此类对象之前,来自代码中的print time_open
语句:
((datetime.datetime(2017, 1, 23, 13, 0),),)
这是一个元组(行),包含另一个包含datetime.datetime()
对象的元组(一行包含列)。 MySQL数据库适配器(MySQLdb
)根据数据库报告的列类型创建该对象;具有MySQL DATETIME
类型的列将在此处转换为datetime
对象。
如果您有一个TIME
列(评论中似乎提示的新错误消息),那么该值将转换为datetime.timedelta()
对象,记录时间过去了。如果您希望这是时间,则需要将timedelta转换为datetime.datetime
对象:
midnight = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
if (midnight + time_now[0]) > now:
# ...
或将now
值转换为相对于午夜的timedelta:
# timedelta since midnight
midnight = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
now_relative = datetime.datetime.now() - midnight
# ...
if time_now[0] < now_relative:
答案 1 :(得分:-1)
您只需将该tupple转换为datetime.datetime
格式即可。