Bonjour à tous,
Je peine a insérer des données dans ma base de donnée.
Je récupère uen chaine de caractere json qui se présente de la manière suivante
Ma base de donnée 'mqtt' a une table 'position' et voici les champs{"position":{"value":1,"timestamp":"1483729658000","context":{"lat":46.21984,"lng":6.14123,"imei":"865067020400000","alt":452,"heading":90,"speed":34,"battery":38,"sensor":"GSM","tower":"228,03,1771,2d6f,45,57"}},"battery":38}
Mon code python est composé de la maniere suivanteid [int]
imei [varchar]
timestamp [timestamp] (Elle peut etre aussi datetime)
value [int]
lat [double] (ca peut etre un varchar, je ne sais pas ce ui est mieux)
lng [double] (ca peut etre un varchar, je ne sais pas ce ui est mieux)
alt [int] (pas besoin des décimal)
heading [int]
speed [int] (pas besoin des décimal
sensor [varchar]
tower [varchar]
battery [int]
J'import mes librairire:
je prépare mes valeurs à insérer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 import date #sudo apt-get insttal python-pika import pika import json #http://packages.ubuntu.com/fr/precise/python-mysqldb #sudo apt-get install python-mysqldb #import _mysql import MySQLdb
Je récupère mes valeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 add_position = ("INSERT INTO position " "(imei, timestamp, value, lat, lng, alt, heading, speed, sensor, tower, battery) " "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
et j'affiche le résultat pour du debug
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 data = json.loads(body) imei = str(data["position"]["context"]["imei"]) timestamp = data["position"]["timestamp"] value = data["position"]["value"] lat = str(data["position"]["context"]["lat"]) lng = str(data["position"]["context"]["lng"]) if data["position"]["value"] == 1 : alt = data["position"]["context"]["alt"] heading = data["position"]["context"]["heading"] speed = data["position"]["context"]["speed"] else: alt = 0 heading = 0 speed = 0 sensor = str(data["position"]["context"]["sensor"]) tower = str(data["position"]["context"]["tower"]) battery = data["battery"]
Maintenant je veais insérer mes données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 print('') print("IEMI:",imei) print("Timestamp:",timestamp) print("Value:",value) print("Lat:",lat) print("Lng:",lng) if data["position"]["value"] == 1 : print("Alt:",alt) print("Heading:",heading) print("Speed:",speed) print("Sensor:",sensor) print("Tower:",tower) print("Battery:",battery) print('')
Ca marche partiellement, mais je ne pense pas que mon code est propre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 # data_position = (imei, date(timestamp),value,lat,lng,alt,heading,speed,sensor,tower,battery) #date() ne fonctionne pas data_position = (imei, timestamp,value,lat,lng,alt,heading,speed,sensor,tower,battery) db = MySQLdb.connect("localhost","root","pass","mqtt") cursor = db.cursor() try: cursor.execute(add_position, data_position) db.commit() except: db.rollback()
Déja
1. e timestamp, ne fonctionn pas, dans ma champs timestamp de ma bas de donnée, il m'enregistre 0000-00-00 00:00:00
2. j'ai ce message d'erreur
Je vais encore étudier le code, mais si vous pouveiez me mettre sur la bonne piste et m'aider corriger ma syntaxe?receive.py:76: Warning: Data truncated for column 'timestamp' at row 1
cursor.execute(add_position, data_position)
receive.py:76: Warning: Data truncated for column 'tower' at row 1
Milles mercis!!
Partager