在 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 的数据结构仍然相同。
我正在尝试编写一个适用于 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 的数据结构仍然相同。