我有一个脚本,在决定执行其他工作之前,该脚本应该通过另一个脚本检查数据库中的状态字段。我们有多种相似类型的设备,每种类型都有自己的表。该脚本正在检查这三种不同的设备类型,并正在访问我为数据库功能创建的模块。当第一个设备类型运行时,一切运行良好,但是后两个返回Null,结果为None,因为这是python。这三个代码都相同,我只是提交设备名称并输入该函数。我已经打印了它使用的sql查询,并且如果我直接在SQL中运行它,它也可以工作。我还让它选择了整行而不是单列,而所有其他列都返回正确,但是那一列仍然为Null。我检查了数据库结构,除了设备类型以外,它们的列数不同,它们本质上是相同的,尤其是在各表中,该列是相同的。我还有另一个几乎相同的函数,可以拉不同的列,并且该函数可以跨所有表工作。此列上的数据类型为text,我已经尝试使用varchar并收到了相同的结果。
数据库功能:
def getStatus(self, target, type):
sql = 'SELECT `status` FROM `' + type + 's` WHERE `' + type + 'id` = \'' + target + '\''
cursor = self.data_base.cursor()
try:
test = cursor.execute(sql)
data = cursor.fetchone()
print data[0]
return data[0]
except Exception as e:
print "Error: " + str(e)
主脚本(通用版本,除了设备类型不同外,两者都是相同的):
for device in devices:
ip = db.getIp(device, "device type")
status = db.getStatus(device, 'device type')
print status
对于一种类型的设备,两种打印都可以正常工作,而对于另一种设备,两种情况下我都看不到。 数据库是RedHat 7.4上的MariaDB 5.5.56
(来自评论)
CREATE TABLE vgws (
vgwid varchar(16) COLLATE utf8_unicode_ci NOT NULL,
ip varchar(15) COLLATE utf8_unicode_ci NOT NULL,
siteid varchar(8) COLLATE utf8_unicode_ci NOT NULL,
vendor varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
version varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
status text COLLATE utf8_unicode_ci,
PRIMARY KEY (vgwid),
UNIQUE KEY ip (ip)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
生成的查询是
SELECT status FROM vgws WHERE vgwid = 'DEVICE NAME'