erreurs liées aux types données code python insertion dans base mysql

bonjour

décidement, plus j’avance dans la programmation plus j apprends mais le tatonnement et la difficulté à faire du debug tout seul bonjour les heures

bon, j’ai essayé plusieurs choses mais trop newbee, rien ne fonctionne

j’ai plusieurs tables basées sur le même modéle voir copie écran

l’insertion des données de type float et datetime me pose problème. j’ai vérifié le format du date time entre mon code python et la base sql, il a l’air bon. Pour le type float, j’ai un type float dans ma base sans limitation poutant j’ai une erreur a priori sur la longueur de données. j’ai essayé d’arrondir pa la commande round en changeant le type de données mais l’erreur est tjs là. je ne recherche pas une précision absolue s’il y a un moyen de convertir afin que je puisse insérer dans la base mysql $)

Voilà les erreurs avec les valeurs retournées, le code python et la structure de la table tbl-Solar-temp en copie écran

merci d’avance et déjà pour les réponses données dans les différents posts

2014-08-19 00:29:59 <---------DATE
17
I2C: Device 0x04 returned the following from reg 0x00
[0, 0, 48, 66]
(44.0,) <----- HUMIDITE
dhtco2.py:81: Warning: Data truncated for column ‘Humidite’ at row 1
con.execute(sql_command)
dhtco2.py:81: Warning: Out of range value for column ‘Date_Mesure’ at row 1
con.execute(sql_command)
I2C: Wrote 0x03 to register 0x00
I2C: Device 0x04 returned the following from reg 0x00
[0, 0, 12, 66]
35.0 <-----TEMPERATURE
dhtco2.py:103: Warning: Data truncated for column ‘Temperature’ at row 1
con.execute(sql_command)
dhtco2.py:103: Warning: Out of range value for column ‘Date_Mesure’ at row 1
con.execute(sql_command)
I2C: Wrote 0x04 to register 0x00
I2C: Device 0x04 returned the following from reg 0x00
[194, 181, 5, 70]
8557.43945312 <------------TAUX CO2
dhtco2.py:125: Warning: Data truncated for column ‘Taux_co2’ at row 1
con.execute(sql_command)
dhtco2.py:125: Warning: Out of range value for column ‘Date_Mesure’ at row 1
con.execute(sql_command)
Traceback (most recent call last):
File “dhtco2.py”, line 128, in
if mysql_errno() :
NameError: name ‘mysql_errno’ is not defined

LE CODE PYTHON

#!/usr/bin/env python
# -*- coding: latin-1 -*-

# === ArduPi-I2C ================================================
# Communication entre Arduino et Raspberry Pi via le BUS I2C
# ===============================================================
# Tutoriel: http://mchobby.be/wiki/index.php?title=ArduPi-I2C
#  
# Programme Master qui envoi des instructions vers un Arduino par 
# l'intermédiaire de "registres" de façon logiciel sur Arduino. 
# S'utilise avec le programme Arduino SlaveRegisterDataTypes.ino
#
# Ecrit par D. Meurisse pour MCHobby.be
# www.mchobby.be - Vente de kit et composant Arduino et Raspberry Pi
# Licence CC-BY-SA
#
# Basé sur Adafruit_I2C.py librairie Python écrite par AdaFruit Industries 
# www.adafruit.com

import time
import struct
from Adafruit_I2C import Adafruit_I2C
import MySQLdb

from time import sleep, gmtime, strftime

import smtplib
import os
import sys
import smtplib                         

i2c = Adafruit_I2C( 0x04 )

db = MySQLdb.connect(host="localhost",user="root",passwd="poi",db="db_rheorthe")
con = db.cursor()

   
date_mesure = strftime("%Y-%m-%d %H:%M:%S", gmtime())
print date_mesure   

# --- Demander le NO de version ---
# Transfert d'un type BYTE

# Ecriture de la valeur 0x01 dans le registre 0 
i2c.write8( 0, 0x01 );
time.sleep( 0.020 );
print( i2c.readU8( 0x00 ) );

# Donner un delai au périphérique I2C pour qu'il soit prêt a recevoir
# une nouvelle communication... sinon on recoit l'erreur
#   Error accessing 0x04: Check your I2C address
time.sleep( 0.100 )

# --- Demander une valeur décimale ---
# Transfert d'un type DOUBLE

# demander l'opération de reception d'un float h humidité, placer 0x02 dans le
# le registre d'exécution 0
i2c.write8( 0x00, 0x02 )
time.sleep(0.100)
i2c.debug = True


# transformer en string pour unpack
lstData=i2c.readList(0x00,4)
sData = ''
for aByte in lstData:
        sData = sData + chr(aByte)


h_data=struct.unpack('<f',sData)
print h_data # Affiche la valeur en Float.
#h_data_i=round(h_data,2)
#print h_data_i



capteur_ht='SOLAR_H'
# INSERT de la mesure
sql_command = "INSERT INTO tbl_Solar_Hum (Capteur,Humidite, Date_Mesure) VALUES('capteur_ht', 'h_data', 'date_mesure');"
con.execute(sql_command)
db.commit

                    
# demander l'opération de reception d'un float t temperature, placer 0x03 dans le
# le registre d'exécution 0
i2c.write8( 0x00, 0x03 )
time.sleep(0.100)
i2c.debug = True

# transformer en string pour unpack
lstData=i2c.readList(0x00,4)
sData = ''
for aByte in lstData:
        sData = sData + chr(aByte)

t_data, = struct.unpack('<f',sData)
print t_data # Affiche la valeur en Float.

capteur_ht='SOLAR_T'
# INSERT de la mesure
sql_command = "INSERT INTO tbl_Solar_Temp (Capteur, Temperature,Date_Mesure) VALUES('capteur_ht', 't_data', 'date_mesure');"
con.execute(sql_command)
db.commit
                        
# demander l'opération de reception d'un float c02, placer 0x04 dans le
# le registre d'exécution 0
i2c.write8( 0x00, 0x04 )
time.sleep(0.100)
i2c.debug = True

# transformer en string pour unpack
lstData=i2c.readList(0x00,4)
sData = ''
for aByte in lstData:
    sData = sData + chr(aByte)

co2_data, = struct.unpack('<f',sData)
print co2_data # Affiche la valeur en Float.

capteur_co2='SOLAR_CO2'
# INSERT de la mesure
sql_command = "INSERT INTO tbl_Solar_Co2 (Capteur,Taux_co2,Date_Mesure) VALUES('capteur_co2', 'Taux_co2', 'date_mesure');"

con.execute(sql_command)
db.commit

if mysql_errno() :
    sendTextMail()
    db.rollback()

bonjour, juste un truc, pourquoi t'emmerd...r a insérer la date? lors de l'enregistrement la date peut se mettre automatiquement dans sql

pour les autres champs, mets varchar (avec longueur) par exemple

Sinon, formate la date comme suit : 'yyyy-mm-dd hh:mm:ss'

hello

merci de vos réponses varchar a résolu le problème lié au type float par contre, même soucis pour la date avec un insert automatique. j'ai essayé pas mal de solution sur google mais toujours pareil.... =(