Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/05/2013, 10:34
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: base de datos relacionales

Lo que pasa es que tienes mal tu query de insert. El error no es de parte de python.

Este fue el schema que utilice:
Código MySQL:
Ver original
  1. CREATE TABLE clientes (
  2.     codigo INT(11) PRIMARY KEY AUTO_INCREMENT,
  3.     nombre VARCHAR(50),
  4.     poblacion VARCHAR(50),
  5.     cif VARCHAR(20)
  6.  
  7. CREATE TABLE facturas (
  8.     factura INT(11) PRIMARY KEY,
  9.     fecha DATE,
  10.     importe DECIMAL(10,2),
  11.     codigo_cli INT(11),
  12.     FOREIGN KEY (codigo_cli) REFERENCES clientes(codigo)

Este fue el código que utilice:
Código Python:
Ver original
  1. #encoding: utf-8
  2. import MySQLdb
  3. import datetime
  4.    
  5. #Conectar a la base de datos
  6. try:
  7.     db = MySQLdb.connect("localhost","root", "", "gesmol")
  8.     cursor = db.cursor()
  9.    
  10. except:
  11.     print "No se ha podido esteblecer conexion con el servidor."
  12.     raw_input()
  13.     exit
  14.    
  15. #Funcion ingresar
  16. def ingresar():
  17.     print "********** ALTA DE CLIENTES **********: \n"
  18.     codigo = int(raw_input("Ingrese el Codigo del Cliente: "))
  19.     nombre = raw_input("Ingrese el Nonbre del Cliente: ")
  20.     poblacion = raw_input("Ingrese la Población del Cliente: ")
  21.     cif = raw_input("Ingrese el CIF del Cliente: ")
  22.    
  23.     sql = "INSERT INTO clientes(codigo, nombre, poblacion, cif)\
  24.           VALUES('%s','%s','%s','%s')" % \
  25.            (codigo, nombre, poblacion, cif)
  26.     cursor.execute(sql) #Ejecuta los cambios en la base de datos
  27.     db.commit() #Confirma los cambios en la base de datos
  28.  
  29.     RegresarMenu()  
  30.  
  31. #Funcion listar
  32. def listar():
  33.     sql = "SELECT * FROM clientes"
  34.     cursor.execute(sql)
  35.     resultados = cursor.fetchall() #muestra la fila
  36.     for row in resultados:
  37.         print "%s %s %s %s" %(row[0],row[1],row[2],row[3])
  38.     RegresarMenu()      
  39.        
  40. #Consultar por nombre                    
  41. def consultarNombre():
  42.     nombre = raw_input("Ingrese el nombre del cliente ")
  43.     sql = "SELECT * FROM clientes WHERE Nombre = '%s'" %(nombre)
  44.     cursor.execute(sql)
  45.  
  46.     resultados = cursor.fetchall()
  47.     for row in resultados:
  48.         print "Codigo:   " , row[0]
  49.         print "Nombre:  "  , row[1]
  50.         print "Poblacion:" , row[2]
  51.         print "CIF:      " , row[3]
  52.  
  53.     RegresarMenu()  
  54.      
  55. #modificar        
  56. def modificar():
  57.     codigo = int(raw_input("Ingrese el codigo del cliente "))
  58.     sql = "SELECT * FROM clientes WHERE codigo = '%s'" %(codigo)
  59.     cursor.execute(sql)
  60.     resultados = cursor.fetchall()
  61.     for row in resultados:
  62.         print row          
  63.  
  64.  
  65.     print "Que quieres modificar? "
  66.     print "1 - Nombre "
  67.     print "2 - Poblacion"
  68.     print "3 - CIF"
  69.     op=raw_input("")
  70.    
  71.     if op =="1":
  72.         nombreN = raw_input("Escribe  el nuevo Nombre: ")
  73.    
  74.         cursor.execute("UPDATE clientes SET nombre = '%s' WHERE codigo = '%s' " %(nombreN, codigo))
  75.         db.commit()
  76.         RegresarMenu()
  77.                    
  78.     if op =="2":
  79.         poblacionN = raw_input("Escribe  la nueva Poblacion: ")
  80.         cursor.execute("UPDATE clientes SET poblacion = '%s' WHERE codigo = '%s' " %(poblacionN, codigo))
  81.         db.commit()
  82.         RegresarMenu()
  83.                            
  84.     if op =="3":
  85.         cif=raw_input("Escribe  el nuevo CIF: ")
  86.         cifN = raw_input("Escribe el nuevo CIF: ")
  87.         cursor.execute("UPDATE clientes SET cif = '%s' WHERE codigo = '%s' " %(cifN, codigo))
  88.         db.commit()
  89.         RegresarMenu()
  90.      
  91.  #eliminar      
  92. def eliminar():
  93.     codigo = int(raw_input("Ingrese el codigo del cliente "))
  94.     sql = "SELECT * FROM clientes WHERE codigo = '%s'" %(codigo)
  95.     cursor.execute(sql)
  96.     resultados = cursor.fetchall()
  97.     for row in resultados:
  98.         print row
  99.  
  100.     eliminar = raw_input("Quieres eliminar este cliente ")
  101.     if eliminar == "S" or "s":
  102.         cursor.execute("DELETE FROM clientes WHERE codigo = '%s'" %(codigo))
  103.         db.commit()
  104.         RegresarMenu()
  105.     else:
  106.         RegresarMenu()
  107.  
  108.  
  109. def altafa():
  110.     print "********** ALTA DE FACTURAS **********: "
  111.     numero = int(raw_input("Ingrese el numero de factura: "))
  112.     fecha = raw_input("Ingrese la fecha de la factura: ")
  113.     importe = int(raw_input("Ingrese el importe de la factura: "))
  114.     codigo_cli = int(raw_input("Ingrese el codigo del Cliente: "))
  115.    
  116.     sql = "INSERT INTO facturas(factura, fecha, codigo_cli, importe) VALUES(%s, %s, %s, %s)"
  117.    
  118.     cursor.execute(sql, (numero,fecha,codigo_cli,importe))
  119.     db.commit()
  120.        
  121.     RegresarMenu()
  122.  
  123.  
  124. def listafa():    
  125.     sql = "SELECT * FROM facturas"
  126.     cursor.execute(sql)
  127.     resultados = cursor.fetchall()
  128.     for row in resultados:
  129.         print "%s  %s %s %s" %(row[0],row[1],row[2],row[3])
  130.          
  131.     RegresarMenu()
  132.        
  133.  
  134. def RegresarMenu():
  135.  
  136.    
  137.     print "------------------------------------------------------------"
  138.     raw_input("\nPresion cualquier tecla para regresar al menu anterior...")
  139.    
  140.     Menu()
  141.        
  142.  
  143.  
  144. #MENU6
  145.    
  146.  
  147. def Menu():
  148.  
  149.     print """
  150.    ----------------------------------------------------------------
  151.  
  152.             Opciones disponibles
  153.  
  154.    ----------------------------------------------------------------
  155.  
  156.      1. - Alta de Clientes
  157.  
  158.      2. - Listado de Clientes
  159.  
  160.      3. - Consultar de un cliente por nombre.
  161.  
  162.      4 -  Modificar un cliente.
  163.      
  164.      5.-  Eliminar un cliente.
  165.      
  166.      6.-  Alta de factura
  167.  
  168.      7.-  Listar facturas
  169.  
  170.      9. - Finalizar el programa.
  171.  
  172.   -----------------------------------------------------------------
  173.   """
  174.     try:
  175.         opcion = int(raw_input("\n  Ingrese una opción  "))
  176.     except:
  177.    
  178.         print "\nError: El valor ingresado no es de tipo numerico, por favor vuelva a intentarlo"
  179.         RegresarMenu()
  180.  
  181.     try:
  182.         if opcion == 1:
  183.             ingresar()
  184.         elif opcion == 2:
  185.             listar()
  186.         elif opcion == 3:
  187.             consultarNombre()
  188.         elif opcion == 4:
  189.             modificar()
  190.         elif opcion == 5:
  191.             eliminar()
  192.         elif opcion == 6:
  193.             altafa()
  194.         elif opcion == 7:
  195.             listafa()    
  196.         elif opcion == 9:
  197.             print "El programa se esta cerrando..."
  198.             try:
  199.                 db.close()
  200.                 exit()
  201.             except:
  202.                 exit()
  203.         else:
  204.             print "Error"
  205.             RegresarMenu()
  206.     except MySQLdb.Error, e:
  207.         print "\nError Final", e
  208.         RegresarMenu()
  209.  
  210. Menu()

Última edición por razpeitia; 23/05/2013 a las 11:19