在 SELECT 语句后获取数组

Fetch array after SELECT statement

我正在尝试编写一个适用于 MySql 的脚本。

脚本必须select一行table然后打印结果。 这是脚本:

#! /usr/bin/env python

import MySQLdb
import sys

id_room=sys.argv[1]
connection = MySQLdb.connect("localhost","residente","pinkrabbits","domotica")
cursor=connection.cursor()
command="SELECT active FROM home WHERE id_room = " + str(id_room)
print (command)
cursor.execute(command)
active=cursor.fetchall()
print(active)
cursor.close()
connection.close()

if active == 1:
        print "1"
else:
        print "Not 1"

这是结果:

pi@raspberrypi /var/www/domotica/python $ sudo python luce.py 1
SELECT active FROM home WHERE id_room = 1
((1,),)
Not 1
pi@raspberrypi /var/www/domotica/python $

在数据库的 table 中,值 "active" 是 1,但是当我将 python 脚本中的值与 1 进行比较时,结果是 "Not 1"。

为什么?

两个变量的类型不同。尝试打印 type(attivo) 来找出两个变量的类型。

函数fetchall() return 一个元组的元组。所以你需要比较里面的值和1,而不是元组本身。

if attivo[0][0] == 1:
    print "1"

mysql 接口为查询中返回的每一行返回一个 tuple。所以你需要实际查看每一行然后拉出第一个(也是唯一一个)元素:

first_row_matched = attivo[0]
first_column_of_first_row = first_row_matched[0]
if first_column_of_first_row == 1:
    print 'It works!'

当然,它是这样设计的,所以当你发出这样的查询时:

SELECT foo, bar FROM baz WHERE qux = 1;

来自 fetchall 的数据结构仍然相同。