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

{"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}
Ma base de donnée 'mqtt' a une table 'position' et voici les champs
id [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]
Mon code python est composé de la maniere suivante

J'import mes librairire:
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 prépare mes valeurs à insérer
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)")
Je récupère mes valeurs
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"]
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
 
 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('')
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
 
 # 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()
Ca marche partiellement, mais je ne pense pas que mon code est propre.

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
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
Je vais encore étudier le code, mais si vous pouveiez me mettre sur la bonne piste et m'aider corriger ma syntaxe?

Milles mercis!!