我是Python / Flask的新手,正在为我正在玩的一些家庭自动化编写一个小脚本。
此刻,我的脚本中有一条路由由cron作业运行。这会嗅到蓝牙数据包,以查看谁在屋里和谁在屋外,这样我就可以控制暖气了。我的桌子上每个人都有一行,状态为“进”或“出”。
这很好用。
我还有另一种方法可以读回这些值,并根据其是否在其中显示绿色或红色的条形图。
它正在读取值并执行我遇到的一些逻辑。
如果我获得一个人的状态并将其显示在我的仪表板上(使用HTML模板创建),则其显示的值为:
('In',)
在MySQL表中,它只是在-没有引号或括号。
在我的Python脚本中,我有:
conn = MySQLdb.connect(host="localhost", user = "*****", passwd = "*****", db = "mydb")
cursor = conn.cursor()
cursor.execute("select status from occupants WHERE id = '1'")
data = cursor.fetchone()
result = data
#result = str(result)
if (result == "In"):
result = "In"
else:
result = "Out"
这总是返回Out。
我在if语句中尝试了多种方法,但是显然我没有找到正确的方法。我什至尝试过:
if (result == "('In',)")
但是,即使这返回了。
现在我已经开始搜寻并玩了大约2天了。
感谢任何想法!
答案 0 :(得分:1)
您需要按索引获取值。 Python返回行的元组。您需要获取第一列。
只需按索引data [0]即可获取值
然后继续进行比较。
编辑:当您使用“ in”运算符时,您只是在遍历元组。
这是可行的,但不是一个好主意,当您确定已经知道时,要查找的数据位于索引0。
答案 1 :(得分:1)
您正在使用cursor.fetchone()
,它将返回tuple
或None
(如果找不到元素)。因此,执行命令后收到的是一个只有一个元素的元组,这在这种情况下意义不大,但这就是Python API返回数据的方式。因此,即使在使用fetchone()
之后,您也需要显式访问第一个元素,这可以像lst[0]
那样进行。因此,您需要将行更改为:
result = ""
if data is not None:
result = data[0]
print result
答案 2 :(得分:1)
“结果”中的数据要多,而“输入”中的数据要多。例如:
a = ["yes", "hello"]
b = "no"
if "yes" == a:
print("yes yes yes")
else:
print("Something is wrong")
这会为您提供“出了点问题”作为输出,但如果您这样做:
a = ["yes", "hello"]
b = "no"
if "yes" in a:
print("yes yes yes")
else:
print("Something is wrong")
现在,您的输出为“是,是”。希望这会有所帮助:)
答案 3 :(得分:1)
同意阿比吉斯;索引将是一个更好的主意。
您的数据库查询结果可能看起来像这样:
database_query_result = [('In',)]
在这种情况下,您可以在不进行逻辑比较的情况下仅获取如下所示的乘员身份即可获得所需的答案。
result = database_query_result[0][0]
print(result)
为什么有效:
答案 4 :(得分:0)
好吧,像往常一样,发布后5分钟,我尝试了一些不同的方法并使其正常运行。但是,我不确定这是否是软糖还是要做的合法事情:
let data = [
{ size: 5, qty: 2, rest: 0 },
{ size: 2, qty: 5, rest: 0 },
{ size: 1, qty: 10, rest: 0 },
{ size: 3, qty: 3, rest: 1 },
{ size: 4, qty: 2, rest: 2 }
];
let result = data.sort((a, b) => a.rest - b.rest)
.filter((item, index, array) => item.rest === array[0].rest);
console.log(result);
这现在有效。
对于本练习而言,工作环境是否肮脏并不重要,但我想知道是否有更优雅/传统的解决方案供我学习。