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 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    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!!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    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()
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

+ 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, 17h34
  2. Réponses: 11
    Dernier message: 04/04/2012, 13h35
  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, 10h24
  4. Réponses: 2
    Dernier message: 04/11/2006, 00h33
  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, 07h55

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