convertir requette mysql en python ?

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

maccoa
Messages : 40
Enregistré le : lun. 11 sept. 2017 17:19

convertir requette mysql en python ?

Message par maccoa » ven. 20 oct. 2017 11:21

Bonjour.

depuis quelques temps j'essaye d'ajouter des données à une table mysql avec python sans résulta.

avec phpmyadmin pas de problèmes, voici la requette :

Code : Tout sélectionner

INSERT INTO `conso`.`samples` (`address`, `type`, `aggregate`, `time`, `inssp`, `updsp`, `value`, `text`, `samples`) VALUES ('500', 'VA', 's', NOW(), UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '1', NULL, '1');
j'ai lue plusieurs tuto , et j'ai remarquer plusieurs syntaxe , soit ' ou " et différentes façons de procéder.
à chaque fois j'ai une erreur iddentation .

à partir d'un tuto dans une table j'ai ce code qui fonctionne

Code : Tout sélectionner

cur.execute("""INSERT INTO pir(Tours) VALUES(%s)""", ('1'))
j'ai donc essayé

Code : Tout sélectionner

cursor.execute("""INSERT INTO samples(address, type, aggregate, time, inssp, updsp, value, text, samples) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s)""", (500, "VA", "s", now, NULL, NULL, 1, NULL, 1))
et différentes variantes méthode mais à chaque fois

Code : Tout sélectionner

IndentationError: unexpected unindent
auriez vous une piste ou une idée??
merci.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: convertir requette mysql en python ?

Message par Bud Spencer » ven. 20 oct. 2017 13:54

Dans ton code python, remplace ton cursor.execute par un print. ca va t'afficher ta requête dans la console et tu vas comprendre tout de suite pourquoi ce la ne fonctionne pas ;) ...

AU pif comme ca :
Premier problème, NULL n'existe a ma connaissance pas en python, de mémoire l'équivalent est None
Second problème, je doute que now exprime une valeur cohérente pour un champs datetime mysql
Modifié en dernier par Bud Spencer le ven. 20 oct. 2017 14:00, modifié 1 fois.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: convertir requette mysql en python ?

Message par mike913 » ven. 20 oct. 2017 13:57

Bonjour,

C'est un problème d'indentation !
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: convertir requette mysql en python ?

Message par Bud Spencer » ven. 20 oct. 2017 14:00

mike913 a écrit :Bonjour,

C'est un problème d'indentation !
SI tu le dis ...
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: convertir requette mysql en python ?

Message par mike913 » ven. 20 oct. 2017 16:35

Quand on lis le post en entier il cite le message d'erreur:
IndentationError: unexpected unindent
cordialement
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

maccoa
Messages : 40
Enregistré le : lun. 11 sept. 2017 17:19

Re: convertir requette mysql en python ?

Message par maccoa » ven. 20 oct. 2017 17:46

bon j'ai presque trouver.

Code : Tout sélectionner

#!/usr/bin/python

import MySQLdb
import time
from datetime import datetime

# on definie le format de la date
now = datetime.now()
now.strftime('%y/%m/%d/%h/%m/%s')

# Open database connection
db = MySQLdb.connect("localhost","root","xxxx","conso" )

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

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO samples(address, type, aggregate, time, value, samples) \
       VALUES ('%d', '%s', '%s', '%s', '%d', '%d')" % \
       (500, 'VA', 's', now, 1, 1)
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()
me reste plus qu'a trouver comment insérer sous le format TIMESTAMP mais ça fonctionne sans ça :mrgreen:
merci

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: convertir requette mysql en python ?

Message par mike913 » ven. 20 oct. 2017 18:04

Le format date de mysql est: date YYYY-MM-DD HH:MM:SS
et donc

Code : Tout sélectionner

date = time.strftime('%Y-%m-%d %H:%M:%S')
ensuite

Code : Tout sélectionner

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO samples(address, type, aggregate, time, value, samples) \
       VALUES ('%d', '%s', '%s', '%s', '%d', '%d')" % \
       (500, 'VA', 's', date, 1, 1)
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: convertir requette mysql en python ?

Message par mike913 » sam. 21 oct. 2017 10:52

Bonjour

Je ne sais pas ou tu en es, mais voici le code que je te propose;

Code : Tout sélectionner

#!/usr/bin/env python
# coding=UTF-8
# ----------------------------------------------------------------------------
# import des modules
# ----------------------------------------------------------------------------
import sys
import MySQLdb
import time
from datetime import datetime

# on definie le format de la date
#! now = datetime.now()
#! now.strftime('%y/%m/%d/%h/%m/%s')
now = time.strftime('%Y-%m-%d %H:%M:%S')

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO samples(address, type, aggregate, time, value, samples) \
	VALUES ('%d', '%s', '%s', '%s', '%d', '%d')" % \
	500, 'VA', 's', now, 1, 1)
	
	
# Open database connection
try:
	db = MySQLdb.connect("localhost","root","xxxx","conso" )
except MySQLdb.Error as e:
	# En cas d'anomalie
	print "Erreur %d: %s" % (e.args[0],e.args[1])
	sys.exit(1)
	
# prepare a cursor object using cursor() method
cursor = db.cursor()
	
try:
	# Execute the SQL command
	cursor.execute(sql)
	# Commit your changes in the database
	db.commit()

except MySQLdb.Error as e:
	print "%s ==> Erreur %d: %s" % (sql,e.args[0],e.args[1])
	# Rollback in case there is any error
	db.rollback()

finally:
	db.close()
Cordialement
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: convertir requette mysql en python ?

Message par Bud Spencer » sam. 21 oct. 2017 12:34

Pour rester conforme a l'originale il suffisait juste d'écrire la requête python comme ca :

Code : Tout sélectionner


query = "INSERT INTO `conso`.`samples` " \
	"(`address`,`type`,`aggregate`,`time`,`inssp`,`updsp`,`value`,`text`,`samples`)" \
	" VALUES " \
	"(%d, '%s', '%s', NOW(), UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, NULL, %d)" \
	% (500,"VA","s",1,1)
	
cursor.execute(query)
	
;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

maccoa
Messages : 40
Enregistré le : lun. 11 sept. 2017 17:19

Re: convertir requette mysql en python ?

Message par maccoa » sam. 21 oct. 2017 14:56

merci !!

à se que je vois , il y'a plusieurs façons d'arriver à ses fins :mrgreen:

en lisant pour trouver une solution , j'ai appris pas mal de choses , se qui à amener pas mal de questions.

au début j'ai voulue jouer la facilité en prenant du "tout fais" cela m'a permis de découvrir.

vu que m'a chaudière peut aussi dialoguer via modbus RTU , je crois que je vais essayer en parallèle .

en tout cas encore merci !

Répondre

Retourner vers « Python »