Python - Problema para ingresar datos en mysql

   
Vista:
Imágen de perfil de Jhonathan

Problema para ingresar datos en mysql

Publicado por Jhonathan (7 intervenciones) el 17/04/2017 06:44:32
Hola amigos soy un poco nuevo en esto de python y estoy teniendo un problema con la sintaxis de mysql y es que no sé cómo ingresar datos a una tabla X, es decir, yo en mi base de datos tengo los 12 meses y en cada tabla tengo el número de días de ese mes, entonces yo leo el mes en el que estoy y quiero que me ingrese los datos en el mes que me lea la librería datetime, sin embargo, no sé cómo realizarlo intenté hacerlo de la siguiente manera:


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
import MySQLdb
import datetime
 
# Establecemos la conexión con la base de datos
bd = MySQLdb.connect("127.0.0.1","root","proyectodegrado","Mediciones" )
 
# Preparamos el cursor que nos va a ayudar a realizar las operaciones con la base de datos
cursor = bd.cursor()
 
MONTHS = {
    '1' : 'Enero',
    '2' : 'Febrero',
    '3' : 'Marzo',
    '4' : 'Abril',
    '5' : 'Mayo',
}
 
today = datetime.datetime.now()
 
month = MONTHS[str(today.month)]
day = today.day
 
LECTURA1 = 0
LECTURA2 = 0
LECTURA3 = 0
 
sql = "UPDATE %s SET SENSOR1= %s,SENSOR2= %s,SENSOR3 = %s WHERE DIA=%s"
cursor.execute(sql,(month,LECTURA1,LECTURA2,LECTURA3,day,))
 
# Efectuamos los cambios en la base de datos
bd.commit()
 
# Nos desconectamos de la base de datos
bd.close()


Sin embargo, me genera un error diciendo lo siguiente:
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Mayo' SET SENSOR1= 0,SENSOR2= 0,SENSOR3 = 0 WHERE DIA=4' at line 1")

La librería me dice que estoy en mayo debido a que lo hago en una raspberry y no tengo actualizada la fecha, pero eso no es importante.

Si pudieran ayudarme se los agradecería, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Problema para ingresar datos en mysql

Publicado por xve (1485 intervenciones) el 17/04/2017 09:50:59
Hola Jhonathan, el problema que tienes, es que te pone el nombre de la tabla como si fuera una variable de texto, entre comillas, y eso no puede ser...
Si pruebas así, de seguro que te funciona:
1
2
sql = "UPDATE Mayo SET SENSOR1= %s,SENSOR2= %s,SENSOR3 = %s WHERE DIA=%s"
cursor.execute(sql,(LECTURA1,LECTURA2,LECTURA3,day,))

Nos puedes comentar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhonathan

Problema para ingresar datos en mysql

Publicado por Jhonathan (7 intervenciones) el 17/04/2017 15:10:29
Si, ya lo he hecho de la manera que me dices y si funciona, pero esa no es la idea ya que necesito que la librería datetime me lea el mes en el que está y de ahí si lo coloque directamente en el UPDATE, por ejemplo: si la librería me lee que es el mes de Octubre entonces quedaría así:

sql = "UPDATE Octubre SET SENSOR1= %s,SENSOR2= %s,SENSOR3 = %s WHERE DIA=%s"

Y así sucesivamente. Necesito que sea así.

Muchas gracias por tu respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problema para ingresar datos en mysql

Publicado por xve (1485 intervenciones) el 17/04/2017 22:24:04
Mi recomendación es que separar una base de datos por meses es un error de estructuración, es mucho mejor poner un campo Mes en la tabla y utilizar la misma, no tiene ningún sentido crear varias tablas iguales con diferente nombre.

Una manera, podrías hacer así (no lo he probado):
1
2
3
sql = "UPDATE %s" % month"
sql+=" SET SENSOR1= %s,SENSOR2= %s,SENSOR3 = %s WHERE DIA=%s"
cursor.execute(sql,(LECTURA1,LECTURA2,LECTURA3,day,))

nos puedes comentar si funciona?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhonathan

Problema para ingresar datos en mysql

Publicado por Jhonathan (7 intervenciones) el 18/04/2017 06:35:34
Creo que tuviste un problema en colocar las doble comillas pero creo que lo que quisiste poner fue esto:

1
2
3
sql = "UPDATE %s % month"
sql+= "SET SENSOR1=%s, SENSOR2=%s, SENSOR3=%s WHERE DIA =%s"
cursor.execute(sql,(LECTURA1,LECTURA2,LECTURA3,day,))

Sin embargo me sale este error:

Traceback (most recent call last):
File "/home/pi/Desktop/Proyecto_de_grado/Prueba_MESES.py", line 36, in <module>
cursor.execute(sql,(LECTURA1,LECTURA2,LECTURA3,day,))
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
query = query % db.literal(args)
ValueError: unsupported format character 'm' (0x6d) at index 12

He pensado lo que dices y voy a realizar 1 sola tabla dónde estén los meses y los respectivos días sin embargo, no quiero quedarme con la duda de cómo resolver este problema.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problema para ingresar datos en mysql

Publicado por xve (1485 intervenciones) el 18/04/2017 07:41:21
No, perdoname, que sobra la ultima comilla... seria así:

1
2
3
sql = "UPDATE %s" % month
sql+=" SET SENSOR1= %s,SENSOR2= %s,SENSOR3 = %s WHERE DIA=%s"
cursor.execute(sql,(LECTURA1,LECTURA2,LECTURA3,day,))

Puedes probarlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jhonathan

Problema para ingresar datos en mysql

Publicado por Jhonathan (7 intervenciones) el 18/04/2017 07:49:50
Me haz resuelto la vida jajajaja, muchas gracias por la ayuda funcionó a la perfección
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema para ingresar datos en mysql

Publicado por brayan (1 intervención) el 16/01/2018 17:49:52
gracias también tenia el mismo problema y pude solucionar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar