我是python的新手,很抱歉,如果我的问题很愚蠢。从sql语句中,我填写这个词:
config_params = [dict(
hostname=row[0], syslocation=row[1],
ipaddress=socket.inet_ntoa(struct.pack('!L', row[2])),
netmask=socket.inet_ntoa(struct.pack('!L', row[3])),
username=row[4], password=row[5], bri1=row[6], bri2=row[7],
bri3=row[8], bri4=row[9]) for row in cur.fetchall()
]
现在我可以打印整个'config_params',如:
print config_params
如何“仅”打印“主机名”中的值?它没有用 print config_params ['hostname']
感谢您的帮助,
答案 0 :(得分:1)
问题是您没有创建dict
,而是创建了list
行,其中每个元素都是dict
。
所以,只打印第一行的hostname
:
print config_params[0]['hostname']
或者,打印每行的主机名:
for row in config_params:
print row['hostname']
...或者,如果您愿意:
print '\n'.join(row['hostname'] for row in config_params)
与此同时,如果您首先只想要一行,只需使用fetchone
而不是循环fetchall
:
row = cur.fetchone()
config_params = dict(
hostname=row[0], syslocation=row[1],
ipaddress=socket.inet_ntoa(struct.pack('!L', row[2])),
netmask=socket.inet_ntoa(struct.pack('!L', row[3])),
username=row[4], password=row[5], bri1=row[6], bri2=row[7],
bri3=row[8], bri4=row[9])
现在你刚收到dict
。
值得注意的是,许多数据库库为您提供了一种方法,可以使用列名作为键,甚至更高级的东西,为每行自动创建一个dict。例如,使用sqlite3
:
con = sqlite3.connect(dbpath, factory=sqlite3.Row)
cur = con.execute('SELECT * FROM Config')
config_params = cur.fetchone()
print config_params['hostname']
答案 1 :(得分:1)
你有一个词典列表,所以你要循环它们:
for param in config_params:
print param['hostname']
或访问单个项目:
print config_params[0]['hostname']
或使用列表推导来仅提取主机名:
print [d['hostname'] for d in config_params]