Python - Python y mysql

   
Vista:

Python y mysql

Publicado por Patricia (1 intervención) el 12/12/2017 20:38:12
Hola a todos

Estoy intentando hacer una prueba con una base de datos de Mysql pero utilizando Python para introducir los datos. El ejercicio es el siguiente:

1. Al iniciar el programa creará 10 registros de forma automática. Que creo que lo he logrado.
2. Tras esto irá pidiendo datos al usuario por pantalla: Nombre, Profesion y Muerte (salvo id, que deberá ser generado automáticamente). Lo he intentado pero creo que no funciona.
a) El valor de ID tanto generar automáticamente como evitar que se repita lo tiene que controlar
python.
b) si se mete un valor en blanco no se realizará el insert.
3. En cada ejecución sería necesario introducir más de un registro.


Un saludo y muchas gracias


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/python
# -*- coding: utf-8 -*-
 
import MySQLdb
 
Conexion = MySQLdb.connect(host='localhost', user='conan',passwd='crom', db='DBdeConan') #Conexion con la base de datos
 
micursor = Conexion.cursor() #Cursor creado
 
#Insertando los 10 registros que pide el ejercicio
#Registro 1
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (1, \"Ejercito de Zombies\",\"Muertos Vivientes\",\"Desmembramiento a espada\");"
micursor.execute(query)
#Registro 2
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (2, \"Hombre lobo\",\"Licantropo\",\"Bala de plata\");"
micursor.execute(query)
#Registro 3
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (3, \"Vampiro feo\",\"Muertos Vivientes\",\"Estaca de madera\");"
micursor.execute(query)
#Registro 4
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (4, \"Gran Zombie\",\"Muertos Vivientes\",\"Balazo en cabeza\");"
micursor.execute(query)
#Registro 5
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (5, \"Espiritu\",\"Muertos\",\"Reflejo espejo\");"
micursor.execute(query)
#Registro 6
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (6, \"Dracula\",\"Muertos Vivientes\",\"Estaca de madera\");"
micursor.execute(query)
#Registro 7
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (7, \"Vampiro\",\"Muertos Vivientes\",\"Estaca de madera\");"
micursor.execute(query)
#Registro 8
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (8, \"Crinos\",\"Licantropo\",\"Bala de plata\");"
micursor.execute(query)
#Registro 9
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (9, \"Hispo\",\"Licantropo\",\"Bala de plata\");"
micursor.execute(query)
#Registro 10
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (10, \"Lobo\",\"Animales\",\"Espada\");"
micursor.execute(query)
 
id=10+1
 
Nombre= raw_input ("Ingrese el nombre de la victima")
Profesion= raw_input ("Ingrese la profesion de la victima")
Muerte= raw_input ("Ingrese la causa de la muerte")
query="INSERT INTO Victimas (id, Nombre, Profesion, Muerte) VALUES (%s,\"%s\",\"%s\", \"%s\");"
micursor.execute (query)
 
Conexion.commit() #Hacer efectiva la escritura de datos
 
query= "SELECT * FROM Victimas WHERE ;"
 
micursor.execute(query)
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 kip

Python y mysql

Publicado por kip (204 intervenciones) el 13/12/2017 02:09:18
Hola, una vez ingresado los valores para la query debes pasarlos como tupla a execute, algo asi:

1
2
query="INSERT INTO Victimas (id, Nombre, Profesion, Muerte) VALUES (%s,%s,%s, %s);"
micursor.execute (query, (id, Nombre, profesion, Muerte))

Aquello debería ingresarte los datos, fijate que le quite las " porque el modulo MySQLdb se encarga de parsear estos valores al especificar el formato, en este caso %s.
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

Python y mysql

Publicado por Patricia (4 intervenciones) el 13/12/2017 09:22:08
Hola,

Sí eso lo he logrado... El problema es como genero el ID automáticamente sin pisar el ID de los que tengo creados es decir. Si mi último ID de los que tengo creados es 10, como consigo que los que vou a introducir sea 11, el siguiente 12 automáticamente sin meterlos a mano.

Un saludo
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

Python y mysql

Publicado por xve (1491 intervenciones) el 13/12/2017 11:22:46
Hola Patricia, eso lo haces en la definición de la tabla... tienes que indicar que el id se autonumerico y incremental.

Muéstranos la definición de tu tabla y te lo modifico
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

Python y mysql

Publicado por Patricia (4 intervenciones) el 13/12/2017 11:29:17
Ok, pero es para un trabajo que me han mandado de un curso y explícitamente nos dice que eso lo hay qie hacer en python no en Mysql...

Un saludo
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

Python y mysql

Publicado por xve (1491 intervenciones) el 13/12/2017 12:25:20
Ok, pero la tabla quien la ha creado?
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

Python y mysql

Publicado por Patricia (4 intervenciones) el 13/12/2017 13:58:45
La tabla la he creado yo. El id tiene INT y el restos de campos VARCHAR (100).

Un saludo
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

Python y mysql

Publicado por xve (1491 intervenciones) el 13/12/2017 19:09:19
Pues cuando crees la base de datos, tienes que ponerle esos valores al id... tanto si creas la base de datos desde Python o directamente desde MySQL.
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

Python y mysql

Publicado por Patricia (4 intervenciones) el 16/12/2017 19:39:02
Hola

He creado este código. No entiendo porqué no funciona.

Un saludo.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/python
# -*- coding: utf-8 -*-
 
#Queda hacer por hacer:
    #ID
    #bucle para introducir varios registros tipo basta
    #Si se introduce un valor en blanco para cualquier campo
        #no se efectuará el insert y se enviará al usuario un aviso advirtiendo que no se ha hecho
import MySQLdb
 
Conexion = MySQLdb.connect(host='localhost', user='conan',passwd='crom', db='DBdeConan') #Conexion con la base de datos
 
micursor = Conexion.cursor() #Cursor creado
 
#Insertando los 10 registros que pide el ejercicio
#Registro 1
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (1, \"Ejercito de Zombies\",\"Muertos Vivientes\",\"Desmembramiento a espada\");"
micursor.execute(query)
#Registro 2
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (2, \"Hombre lobo\",\"Licantropo\",\"Bala de plata\");"
micursor.execute(query)
#Registro 3
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (3, \"Vampiro feo\",\"Muertos Vivientes\",\"Estaca de madera\");"
micursor.execute(query)
#Registro 4
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (4, \"Gran Zombie\",\"Muertos Vivientes\",\"Balazo en cabeza\");"
micursor.execute(query)
#Registro 5
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (5, \"Espiritu\",\"Muertos\",\"Reflejo espejo\");"
micursor.execute(query)
#Registro 6
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (6, \"Dracula\",\"Muertos Vivientes\",\"Estaca de madera\");"
micursor.execute(query)
#Registro 7
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (7, \"Vampiro\",\"Muertos Vivientes\",\"Estaca de madera\");"
micursor.execute(query)
#Registro 8
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (8, \"Crinos\",\"Licantropo\",\"Bala de plata\");"
micursor.execute(query)
#Registro 9
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (9, \"Hispo\",\"Licantropo\",\"Bala de plata\");"
micursor.execute(query)
#Registro 10
query= "INSERT INTO Victimas (id,Nombre,Profesion,Muerte) VALUES (10, \"Lobo\",\"Animales\",\"Espada\");"
micursor.execute(query)
 
 
Conexion.commit()
 
#Generando un nuevo ID
 
def generarNuevoId():
   """
   Funcion que genera un nuevo id de forma aleatoria
   """
 
lista = [1,2,3,4,5,6,7,8,9,10] #id ya creadas
 
nuevoid = generarNuevoId()
 
while nuevoid in lista:
   nuevoid = generarNuevoId()
 
lista.append(nuevoid)
 
id_generado=[-1]
 
#Insertar registro de forma manual (VER Modulo Ingreso)
def require_input(prompt):
   ret = raw_input(prompt)
   if not ret:
       require_input(prompt)
   return ret
 
Nombre= require_input("Ingrese el nombre de la victima:")
Profesion= require_input ("Ingrese la profesion de la victima:")
Muerte= require_input("Ingrese la causa de la muerte:")
id_generado=[-1]
while True:
    opcion = raw_input('(Para salir pulse S) (Para conitnuar pulse C)')
    if opcion.upper() == 'S':
        query= "SELECT * FROM Victimas";
        micursor.execute(query)
        registros= micursor.fetchall()
        print registros
        break
    elif opcion.upper ()=='C':
        Nombre= require_input("Ingrese el nombre de la victima:")
        Profesion= require_input ("Ingrese la profesion de la victima:")
        Muerte= require_input("Ingrese la causa de la muerte:")
        id_generado=[-1]
        # Aquí primero deberías generar un ID y guardarlo en id_generado.
        query = "INSERT INTO Victimas (id, Nombre, Profesion, Muerte)\
                      VALUES('%s','%s','%s','%s');" \
        micursor.execute(query, (id_generado, Nombre, Profesion, Muerte))
        Conexion.commit()
        print "El registro ha sido ingresado."
 
 
#Final base y borrado
query= "DELETE FROM Victimas";
micursor.execute(query)
Conexion.commit()
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