[Python] Query naar tabelnaam met superscript lukt niet

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • jjust
  • Registratie: April 2005
  • Laatst online: 01-10 22:01

jjust

Het leven is een strijd

Topicstarter
Ik probeer met Python gegevens op te halen uit een InfluxDB. Dat gaat goed bij tabellen die een naam hebben die bestaat uit gewone tekens. Er zijn echter twee tabellen met een naam met speciale tekens namelijk:
  1. °C
(zie 1ste output in onderstaande code)

Als ik dan de query run krijg ik een foutcode. Deze query werkt in deze vorm wel bij de andere tabellen. Ik krijg het niet opgelost. Ik heb als alternatief zowel voor als na de "3" een escape letter gebruikt '\'. Daarnaast heb ik i.p.v. het teken de unicode karakter code geprobeerd maar dat lukte ook niet.

Iemand die me een zet in de goede richting kan geven?

code:
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
35
36
37
38
39
40
41
Input:
from influxdb import InfluxDBClient
import pandas as pd
client = InfluxDBClient(host='xxx.xxx.x.xxx', port=8086, database='home_assistant')
client.get_list_measurements()

Output:
[{'name': '%'},
 {'name': 'W'},
 {'name': 'kWh'},
 {'name': 'm3'},
 {'name': 'm³'},
 {'name': 'ppm'},
 {'name': 'sensor.cvverwarmingaanuit'},
 {'name': 'sensor.cvvlamaanuit'},
 {'name': 'sensor.warmwateraanuit'},
 {'name': '°C'}]

Input:
result = client.query('select * from m³;', epoch='rfc3339')

Output:
InfluxDBClientError                       Traceback (most recent call last)
<ipython-input-56-ff36fd633f91> in <module>
----> 1 result = client.query('select * from m³;', epoch='rfc3339')

~/anaconda3/lib/python3.7/site-packages/influxdb/client.py in query(self, query, params, bind_params, epoch, expected_response_code, database, raise_errors, chunked, chunk_size, method)
    525             data=None,
    526             stream=chunked,
--> 527             expected_response_code=expected_response_code
    528         )
    529 

~/anaconda3/lib/python3.7/site-packages/influxdb/client.py in request(self, url, method, params, data, stream, expected_response_code, headers)
    376         else:
    377             err_msg = reformat_error(response)
--> 378             raise InfluxDBClientError(err_msg, response.status_code)
    379 
    380     def write(self, data, params=None, expected_response_code=204,

InfluxDBClientError: 400: {"error":"error parsing query: found \u00b3, expected ; at line 1, char 16"}

Beste antwoord (via jjust op 13-11-2022 22:14)


  • alson
  • Registratie: November 2006
  • Laatst online: 11-09 10:35
Dit heeft weinig met Python te maken, maar met een correcte query voor InfluxDB schrijven. Ik ken InfluxDB niet, maar als het op andere SQL dialecten lijkt zou ik proberen de tabelnaam tussen dubbele quotes (") of backticks (`) te zetten, bijvoorbeeld:
code:
1
result = client.query('select * from "m³";', epoch='rfc3339')

Alle reacties


Acties:
  • 0 Henk 'm!

  • CB32
  • Registratie: November 2011
  • Laatst online: 12:57
Ik zou grootheden gebruiken voor tabelnamen, dus volume ipv m3 en temperatuur ipv oC.

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • alson
  • Registratie: November 2006
  • Laatst online: 11-09 10:35
Dit heeft weinig met Python te maken, maar met een correcte query voor InfluxDB schrijven. Ik ken InfluxDB niet, maar als het op andere SQL dialecten lijkt zou ik proberen de tabelnaam tussen dubbele quotes (") of backticks (`) te zetten, bijvoorbeeld:
code:
1
result = client.query('select * from "m³";', epoch='rfc3339')

Acties:
  • 0 Henk 'm!

  • jjust
  • Registratie: April 2005
  • Laatst online: 01-10 22:01

jjust

Het leven is een strijd

Topicstarter
alson schreef op zondag 13 november 2022 @ 22:04:
Dit heeft weinig met Python te maken, maar met een correcte query voor InfluxDB schrijven. Ik ken InfluxDB niet, maar als het op andere SQL dialecten lijkt zou ik proberen de tabelnaam tussen dubbele quotes (") of backticks (`) te zetten, bijvoorbeeld:
code:
1
result = client.query('select * from "m³";', epoch='rfc3339')
Je hebt helemaal gelijk dat het over SQL gaat. Met de dubbele quotes (") is het gelukt. Ik zat weer veel te moeilijk te denken.
CB32 schreef op zondag 13 november 2022 @ 21:57:
Ik zou grootheden gebruiken voor tabelnamen, dus volume ipv m3 en temperatuur ipv oC.
Ook eens. Alleen heb ik die namen niet zelf gekozen. Die zijn ooit aangemaakt door Home-Assistant (domotica software).