Page 1 sur 2

convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 11:21
par maccoa
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.

Re: convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 13:54
par Bud Spencer
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

Re: convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 13:57
par mike913
Bonjour,

C'est un problème d'indentation !

Re: convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 14:00
par Bud Spencer
mike913 a écrit :Bonjour,

C'est un problème d'indentation !
SI tu le dis ...

Re: convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 16:35
par mike913
Quand on lis le post en entier il cite le message d'erreur:
IndentationError: unexpected unindent
cordialement

Re: convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 17:46
par maccoa
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

Re: convertir requette mysql en python ?

Posté : ven. 20 oct. 2017 18:04
par mike913
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)

Re: convertir requette mysql en python ?

Posté : sam. 21 oct. 2017 10:52
par mike913
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

Re: convertir requette mysql en python ?

Posté : sam. 21 oct. 2017 12:34
par Bud Spencer
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)
	
;)

Re: convertir requette mysql en python ?

Posté : sam. 21 oct. 2017 14:56
par maccoa
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 !