Résolu : erreur code python mysql

bonjour

toujours dans mes codes....

j'ai une requête dans il y.a le code ci dessous. IDSH est un index de type int (11) autoincrement. J'ai lu que dans ce cas on peut omettre dans la requête le champ ou mettre comme valeur ''. or j'ai l'erreur

warning incorrect integer values : '' for colums 'IDSH' at row 1

Quand je passe en direct par myphpadmin, la ligne s'insère. quand j'omets le champ IDSH, pas d'erreur mais aucun enregistrement et l'erreur ci dessus avec ''.selon google, j'ai essayé de mette le mode strict en off de mysql, modifier en table en mettant le Champ en not null ou null mais nada

je n'y comprends plus rien

capteur_ht='SOLAR_H'
# INSERT de la mesure
sql_command = "INSERT INTO tbl_Solar_Hum (IDSH,Capteur,Humidite, Date_Mesure) VALUES('', 'capteur_ht', 'h_data', 'date_mesure');"
#sql_command = "INSERT INTO tbl_Solar_Hum (IDSH,Capteur,Humidite, Date_Mesure) VALUES('', 'capteur_ht', '30.5', '2014-08-29 08:00:00');

warning incorrect integer values : '' for colums 'IDSH' at row 1

MERCI

:drooling_face:

se serai pas plutot

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');"

bonsoir

merci, j'ai déjà essayé mais dans ce cas la table n'est pas renseignée. pas d'erreur mais aucun enregistrement :zipper_mouth_face:

t'aurai pas oublié le commit?

merci de ta réponse

non il est bien là

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

bonjour,
je connais pas trop le py, donc une recherche et je trouve un code différent sur un site

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)  VALUES ('Mac', 'Mohan', 20, 'M', 2000)"
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

nonos85:
bonjour

toujours dans mes codes....

j'ai une requête dans il y.a le code ci dessous. IDSH est un index de type int (11) autoincrement. J'ai lu que dans ce cas on peut omettre dans la requête le champ ou mettre comme valeur ''. or j'ai l'erreur

warning incorrect integer values : '' for colums 'IDSH' at row 1

Quand je passe en direct par myphpadmin, la ligne s'insère. quand j'omets le champ IDSH, pas d'erreur mais aucun enregistrement et l'erreur ci dessus avec ''.selon google, j'ai essayé de mette le mode strict en off de mysql, modifier en table en mettant le Champ en not null ou null mais nada

je n'y comprends plus rien

capteur_ht='SOLAR_H'

INSERT de la mesure

sql_command = "INSERT INTO tbl_Solar_Hum (IDSH,Capteur,Humidite, Date_Mesure) VALUES('', 'capteur_ht', 'h_data', 'date_mesure');"
#sql_command = "INSERT INTO tbl_Solar_Hum (IDSH,Capteur,Humidite, Date_Mesure) VALUES('', 'capteur_ht', '30.5', '2014-08-29 08:00:00');




warning incorrect integer values : '' for colums 'IDSH' at row 1

MERCI

:drooling_face:

Bonjour

Pas sûr mais à tenter :

sql_command = "INSERT INTO tbl_Solar_Hum (IDSH,Capteur,Humidite, Date_Mesure) VALUES(NULL, 'capteur_ht', '30.5', '2014-08-29 08:00:00');

Ou alors, si ta table ne contient que les 4 colonnes IDSH,Capteur,Humidite & Date_Mesure, déclarées dans cet ordre, tu devrais pouvoir omettre leur désignation dans l'instruction INSERT, et ne pas t'occuper de la colonne en autoincrément. Ce qui donnerait :

sql_command = "INSERT INTO tbl_Solar_Hum VALUES('capteur_ht', '30.5', '2014-08-29 08:00:00');

+1 pour

sql_command = "INSERT INTO tbl_Solar_Hum (IDSH,Capteur,Humidite, Date_Mesure) VALUES(NULL, 'capteur_ht', '30.5', '2014-08-29 08:00:00');

INSERT exige que tous les champs soient remplis, donc '' ne convient pas, il faut mettre NULL

:cold_sweat: j'ai réussi en omettant l'index dans la requête et en changeant le moteur de la base de données par défaut en innodb et en le mettant en MyISAM.

modif:

la solution de B@tto fonctionne également. si j'ai bien lu la doc mysql, '' est considéré comme STRING il faut donc employer NULL.

Pour cela j'ai édité le fichier my.cnf et ajouté la ligne sous la rubrique

[mysqld]

default-storage-engine=MyISAM

j'ai redemarré le tout puis dans myphpadmin, j'ai modifié les bases une à une en les sélectionnant puis en allant dans l'onglet opérations pour changer le type de moteur de données de innodb à myisam.

un grand merci pour vos réponses

$)