我使用Python在InfluxD中创建了一个数据库,代码如下:
from influxdb import InfluxDBClient
host = 'xx.xxx.xx.xxx'
port = 8086
username = 'user'
password = 'password'
database = 'dbname'
client = InfluxDBClient(host = host,
port = port,
username = username,
password = password,
verify_ssl = True)
client.create_database(database)
我可以看到数据库已通过使用正确创建:
client.get_list_database()
结果:
[{'name':'dbname'}]
之后,我用下一段代码向数据库发送了一些数据(时间序列)。如您所见,数据存储在名为Hourly_data
的数据表(测量)中。我已经使用Grafana检查了信息是否已存储在数据库中。我发送到数据库的数据(代码中的dataframe
)是一个 Dataframe ,它有一个名为date
的datetime
索引和几个不同变量的时间序列。
def data_to_influxdb(data,table_name):
connection_info = {'host' : "XX.XXX.XX.XXX",
'port' : 8086,
'user' : 'user',
'password' : 'password',
'database' : 'dbname',
'server_tz' : 'Atlantic/Canary',
'reference_tz': 'UTC'}
client = DataFrameClient(connection_info['host'], connection_info['port'], \
connection_info['user'], connection_info['password'], \
connection_info['database'])
client.write_points(data, measurement=table_name, \
database=connection_info['database'], protocol='json',
batch_size = 20000)
# Close session
client.close()
return
table_name = 'Hourly_data'
data_to_influxdb(dataFrame, tablename)
我想获取数据库中最新数据的日期(最后写入点对应的日期)。当我尝试使用DataFrameClient从数据库查询一些数据时,问题就出现了。我总是得到一个空字典,不管我写什么代码。我已经尝试了这段代码和几个修改,但没有任何效果:
connection_info = {'host' : "XX.XXX.XX.XXX",
'port' : 8086,
'user' : 'user',
'password' : 'password',
'database' : 'dbname'}
client = DataFrameClient(
host = connection_info['host'],
port = connection_info['port'],
username = connection_info['user'],
password = connection_info['password'],
database = connection_info['database'],
)
query = 'SELECT "*" FROM "dbname"."autogen"."Hourly_data"'
client.query(query = query)
这就是我得到的:{}
我使用过的其他替代品:
query = 'SELECT * FROM dbname'
query = 'SELECT * FROM XXX' # wrong name on purpose also turns out into an empty dict {}
我检查了保留政策,似乎没问题:
client.query('SHOW RETENTION POLICIES')
ResultSet({'('results', None)': [{'name': 'autogen', 'duration': '0s', 'shardGroupDuration': '168h0m0s', 'replicaN': 1, 'default': True}]})
1条答案
按热度按时间carvr3hs1#
我最终通过使用这个查询解决了这个问题,在这个查询中,我使用测量值或数据表的名称而不是数据库的名称:
我想这与我在
DataFrameClient
连接中指定数据库名称('dbname')有关,因此当访问数据时,只需要指定测量名称('Hourly_data')。否则,DataFrameClient
将查找名为“dbname”的测量值。