tassilomoedl
(Themenstarter)
Anmeldungsdatum: 27. Juli 2022
Beiträge: 77
|
karzer schrieb: tassilomoedl schrieb: Es geht, aber in der Datenbank wird nichts gespeichert!
Wie hast du das herausgefunden?
Gibt das Programm True aus?
Nein, tut es nicht. Zum Test einfach mal am Ende des Programms das einfügen: client.get_list_database()
Habe ich gemacht. Es gibt nichts aus.
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo, dann legst du auch gar keine DB an. Gruß, noisefloor
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1565
Wohnort: Bad Oeynhausen
|
tassilomoedl schrieb: noisefloor schrieb: Und Fehlermeldungen kannst du hier in einem Codeblock posten statt im Paste-Service. Ist einfacher.
Aber die Fehlermeldung ist so lang und würde den Thread unnötig aufblähen!
noisefloor hat Recht. Ich würde dem Post einfach die letzte Zeile der Fehlermeldung hinzufügen, die ist sowieso am Aussagekräftigsten, bspw.:
TypeError: 'int' object is not iterable noisefloor schrieb: Hallo, dann legst du auch gar keine DB an. Gruß, noisefloor
Das kann nicht sein, das create_database() Modul wird eindeutig aufgerufen, ebenso wie das switch_database() . @tassilomoedl Bitte das hier versuchen & Ausgabe posten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | from influxdb import InfluxDBClient
json_body = [
{
"irgendwas": 123456
}
]
client = InfluxDBClient(host='localhost', port=8086)
client.create_database('test')
client.get_list_database()
client.switch_database('test')
client.write_points(json_body)
# client.get_list_database()
|
Das sollte alle Vorhandenen DBs ausgeben.
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo,
Das kann nicht sein, das create_database() Modul wird eindeutig aufgerufen, ebenso wie das switch_database()
Theoretisch, praktisch wissen wir nicht, welche Code der TE _wirklich_ ausführt. Die Bereitschaft, ein paar mehr Infos zu liefern, ist ja eher dünn bis dato. Gruß, noisefloor
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11265
Wohnort: München
|
karzer schrieb: | json_body = [
{
"irgendwas": 123456
}
]
|
Das wird zu keinem brauchbaren Eintrag in der Datenbank führen - ein Datenpunkt hat üblicherweise einen Namen für das "measurement", ein Dictionary aus tags (Mapping[str, str] ), die eine Unterscheidung von verschiedenen Clients/Messstationen erlauben, die Werte in die selbe Datenbank schreiben, einen (optionalen) Zeitstempel und ein Dictionary, das die Sensornamen und die dazugehörigen Messwerte enthält - außerdem sollte man nicht vergessen die Datenbankverbindung zu schließen - also z.B.:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | import random
import datetime
from contextlib import closing
from typing import List, Mapping, Optional
from influxdb import InfluxDBClient
DATABASE = "test"
random.seed()
with closing(InfluxDBClient(host='localhost', port=8086)) as client:
existing_databases = client.get_list_database()
print(f"Existing Databases: {existing_databases}")
if not any(d for d in existing_databases if d['name'] == DATABASE):
print(f"DB {DATABASE} does not exist, creating it...")
client.create_database(DATABASE)
client.switch_database(DATABASE)
p = {
"measurement": "sensor",
"tags": {"name": "test", "location": "does not matter"},
"time": datetime.datetime.now().isoformat(),
"fields": {
"Sensor1": random.uniform(0, 255),
"Sensor2": random.uniform(-1024, 1024),
}
}
client.write_points([p])
result = client.query('select Sensor1, Sensor2 from sensor;')
print(*p, sep=';')
for p in result['sensor']:
print(*p.values(), sep=';')
|
|
tassilomoedl
(Themenstarter)
Anmeldungsdatum: 27. Juli 2022
Beiträge: 77
|
Bitte das hier versuchen & Ausgabe posten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | from influxdb import InfluxDBClient
json_body = [
{
"irgendwas": 123456
}
]
client = InfluxDBClient(host='localhost', port=8086)
client.create_database('test')
client.get_list_database()
client.switch_database('test')
client.write_points(json_body)
# client.get_list_database()
|
Das sollte alle Vorhandenen DBs ausgeben.
Es gibt aber gar keine Fehlermeldung, sondern einfach GAR KEINEN OUTPUT.
|
tassilomoedl
(Themenstarter)
Anmeldungsdatum: 27. Juli 2022
Beiträge: 77
|
seahawk1986 schrieb: karzer schrieb: | json_body = [
{
"irgendwas": 123456
}
]
|
Das wird zu keinem brauchbaren Eintrag in der Datenbank führen - ein Datenpunkt hat üblicherweise einen Namen für das "measurement", ein Dictionary aus tags (Mapping[str, str] ), die eine Unterscheidung von verschiedenen Clients/Messstationen erlauben, die Werte in die selbe Datenbank schreiben, einen (optionalen) Zeitstempel und ein Dictionary, das die Sensornamen und die dazugehörigen Messwerte enthält - außerdem sollte man nicht vergessen die Datenbankverbindung zu schließen - also z.B.:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | import random
import datetime
from contextlib import closing
from typing import List, Mapping, Optional
from influxdb import InfluxDBClient
DATABASE = "test"
random.seed()
with closing(InfluxDBClient(host='localhost', port=8086)) as client:
existing_databases = client.get_list_database()
print(f"Existing Databases: {existing_databases}")
if not any(d for d in existing_databases if d['name'] == DATABASE):
print(f"DB {DATABASE} does not exist, creating it...")
client.create_database(DATABASE)
client.switch_database(DATABASE)
p = {
"measurement": "sensor",
"tags": {"name": "test", "location": "does not matter"},
"time": datetime.datetime.now().isoformat(),
"fields": {
"Sensor1": random.uniform(0, 255),
"Sensor2": random.uniform(-1024, 1024),
}
}
client.write_points([p])
result = client.query('select Sensor1, Sensor2 from sensor;')
print(*p, sep=';')
for p in result['sensor']:
print(*p.values(), sep=';')
|
Es gibt keine Fehlermeldung, aber die Daten werden nicht gespeichert!
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11265
Wohnort: München
|
Was für eine Version von InfluxDB nutzt du denn genau und auf was für einem System läuft die? Du hast ja "Kein Ubuntu" angegeben...
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo, welche Ausgage generiest das Skript bei dir? "Keine" kann nicht sein, wenn das Skript durchläuft. Gruß, noisefloor
|
tassilomoedl
(Themenstarter)
Anmeldungsdatum: 27. Juli 2022
Beiträge: 77
|
noisefloor schrieb: Hallo, welche Ausgage generiest das Skript bei dir? "Keine" kann nicht sein, wenn das Skript durchläuft. Gruß, noisefloor
Existing Databases: [{'name': '_internal'}, {'name': 'test'}]
measurement;tags;time;fields
2022-08-29T10:08:11.174540Z;222.01423911509576;-700.9048188628756
2022-08-29T10:14:56.790408Z;26.183567343144123;527.391469238546
2022-08-29T10:16:10.474016Z;18.105307342508492;117.91126937621289
2022-08-29T10:16:29.762147Z;82.55279138791762;668.68087859571
2022-08-29T10:57:27.086399Z;250.5786769320449;270.2186235637282
2022-08-29T10:57:28.782424Z;6.649076682399119;-901.627707018037
2022-08-29T10:57:30.281930Z;223.07176814070775;-704.8058677235358
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11265
Wohnort: München
|
Na dann existiert die Datenbank (und wurde bei dem Durchlauf auch nicht neu angelegt) und es gibt gespeicherte Werte von den 6 früheren Aufrufen des Skripts.
|
tassilomoedl
(Themenstarter)
Anmeldungsdatum: 27. Juli 2022
Beiträge: 77
|
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1565
Wohnort: Bad Oeynhausen
|
seahawk1986 schrieb: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | import random
import datetime
from contextlib import closing
from typing import List, Mapping, Optional
from influxdb import InfluxDBClient
DATABASE = "test"
random.seed()
with closing(InfluxDBClient(host='localhost', port=8086)) as client:
existing_databases = client.get_list_database()
print(f"Existing Databases: {existing_databases}")
if not any(d for d in existing_databases if d['name'] == DATABASE):
print(f"DB {DATABASE} does not exist, creating it...")
client.create_database(DATABASE)
client.switch_database(DATABASE)
p = {
"measurement": "sensor",
"tags": {"name": "test", "location": "does not matter"},
"time": datetime.datetime.now().isoformat(),
"fields": {
"Sensor1": random.uniform(0, 255),
"Sensor2": random.uniform(-1024, 1024),
}
}
client.write_points([p])
result = client.query('select Sensor1, Sensor2 from sensor;')
print(*p, sep=';')
for p in result['sensor']:
print(*p.values(), sep=';')
|
Wozu brauchst Du denn List, Mapping und Optional ?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11265
Wohnort: München
|
karzer schrieb: Wozu brauchst Du denn List, Mapping und Optional ?
Die können raus, ich hatte das ursprünglich mit pydantic-Modellen gemacht und vergessen die Zeile zu entfernen.
|