如何使用Python迭代涌流数据结果

时间:2018-02-01 12:56:02

标签: python influxdb influxdb-python

如何遍历从涌入数据库返回的结果集?我使用

得到了这个结果
client = InfluxDBClient(host=influx_host, port=influx_port,database='db')
q = client.query("select * from cpu limit 1")
  

ResultSet({'(u'cpu',None)':[{u'usage_guest_nice':0,u'usage_user':0.90783871790308868,u'usage_nice':0,u'usage_steal':0,u'usage_iowait ':0.056348610076366427,u'host':u'xxx.xxx.hostname.com',u'usage_guest':0,u'usage_idle':98.184322579062794,u'usage_softirq':0.0062609566755314457,u'time':u'2016- 06-26T16:25:00Z',u'usage_irq':0,u'cpu':u'cpu-total',u'usage_system':0.84522915123660536}]})

我想获取usage_user值,usage_system值等,并将它们插入数组中。

4 个答案:

答案 0 :(得分:2)

迭代ResultSet的正确方法是使用get_points()方法,可以选择按度量或标记或两者进行过滤。

例如:

results = client.query("select * from cpu limit 1")
for measurement in results.get_points(measurement='cpu'):
    usage_system = measurement['usage_system']
    # do whatever with usage_system

请参阅官方InfluxDB-Python文档。

答案 1 :(得分:0)

我设法使用原始选项以JSON格式导出结果,然后用逗号分隔它们,将它们添加到数组中,然后迭代它们。我不得不使用这个

的数据帧
import UIKit
import RxCocoa
import RxRealm
import RxSwift
import RealmSwift

class CustomCell: UITableViewCell {

    let bag = DisposeBag()

    var persons: Results<PersonInfo>!

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var ageLabel: UILabel!
    @IBOutlet weak var switch: UISwitch!

    override func awakeFromNib() {
        super.awakeFromNib()

        let realm = try! Realm()
        persons = realm.objects(PersonInfo.self)

        // I thought I need to do something here
        // something like this below
        alarmSwitch.rx.value
        .subscribe{
            // get index of selected cell
            // update data
        }
        .disposed(by: bag)

    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }
}

我希望这会对其他人有所帮助,因为文档不太清楚如何使用它。

答案 2 :(得分:0)

我同意Peterdn的观点,因为客户端本身有一种更简单的方法

results = client.query("select * from cpu limit 100")
resultInList = results.get_points(measurement='cpu')
print(type(resultInList)
--->>> <class 'list'>  

最后一条打印语句显示您具有响应数据列表.....,这意味着它正在转换结果集到列表中,而您无需使用熊猫就可以轻松地进行迭代...

答案 3 :(得分:0)

docs和@peterdn指出,InfluxDBClient.query()函数返回一个ResultSet对象。

使用rs.get_points()将为结果集中的所有点返回一个生成器

示例:

rs = cli.query("SELECT * from cpu")
cpu_points = list(rs.get_points(measurement='cpu'))

您甚至可以按以下方式通过测量,标签或什至两者进行过滤:

按度量过滤:

rs = cli.query("SELECT * from cpu")
cpu_points = list(rs.get_points(measurement='cpu'))

按标签过滤:

rs = cli.query("SELECT * from cpu")
cpu_influxdb_com_points = list(rs.get_points(tags={"host_name": "influxdb.com"}))

按标签和度量过滤:

rs = cli.query("SELECT * from cpu")
points = list(rs.get_points(measurement='cpu', tags={'host_name': 'influxdb.com'}))

希望这会有所帮助。