IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[MySQL] Besoin d'aide pour corriger ma syntaxe


Sujet :

Python

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 102
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 102
    Points : 953
    Points
    953
    Par défaut [MySQL] Besoin d'aide pour corriger ma syntaxe
    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!!

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 102
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 102
    Points : 953
    Points
    953
    Par défaut
    Bne j'ai réussi à faire fonctionner mon code. Voici le code.
    Mais j'aimerais savoir si vous pouviez me dire ce que vous en penser de manier à l'optimiser. Je ne suis pas convaincu.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    #!/usr/bin/env python
     
    import datetime
    #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
     
     
    connection = pika.BlockingConnection(pika.ConnectionParameters(
            host='localhost'))
    channel = connection.channel()
     
    channel.exchange_declare(exchange='log',
                             type='topic')
     
    result = channel.queue_declare(exclusive=True)
    #queue_name = result.method.queue
    queue_name = 'fona'
    print(queue_name)
    channel.queue_bind(exchange='log',
                       queue=queue_name)
     
    print('[*] Waiting for logs. To exit press CTRL+C')
     
    #preparing the myQSl request
    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)")
     
    def callback(ch, method, properties, body):
        print(" [x] %r" % body)
        # {"position":{"value":1,"timestamp":"1483729658","context":{"lat":46.21984,"lng":6.14123,"imei":"865067020424381","alt":452,"heading":90,"speed":34,"battery":38,"sensor":"GSM","tower":"228,03,1771,2d6f,45,57"}},"battery":38}
        data = json.loads(body)
        #preparing the variable
        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"]
     
        #DEBUG
        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('')
     
     
        #preparing the insertion
        data_position = (imei,datetime.datetime.fromtimestamp(int(timestamp)).strftime('%Y-%m-%d %H:%M:%S'),value,lat,lng,alt,heading,speed,sensor,tower,battery)
        #connection
        db = MySQLdb.connect("localhost","root","pass","mqtt")
        cursor = db.cursor()
     
        # http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb
        try:
            cursor.execute(add_position, data_position)
            db.commit()
        except:
            db.rollback()
     
     
     
    channel.basic_consume(callback,
                          queue=queue_name,
                          no_ack=True)
     
    channel.start_consuming()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour corriger une ponctuation
    Par cedrus dans le forum Langage
    Réponses: 6
    Dernier message: 10/01/2013, 18h34
  2. Réponses: 11
    Dernier message: 04/04/2012, 14h35
  3. [Toutes versions] Curiosité avec un recordset et besoin d'aide pour corriger cela
    Par Diablange dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/12/2011, 11h24
  4. Réponses: 2
    Dernier message: 04/11/2006, 01h33
  5. Besoin d'aide pour passage de mysql a sql server
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/12/2005, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo