Foros del Web » Programando para Internet » Python »

python y mysql

Estas en el tema de python y mysql en el foro de Python en Foros del Web. hola que tal maestros, tengo una pequeña duda, para reutilizar un pequeño codigo que tengo en php y poder trasladarlo a python he aqui: PHP: ...
  #1 (permalink)  
Antiguo 06/08/2009, 00:30
 
Fecha de Ingreso: diciembre-2007
Ubicación: Frente al ordenador...
Mensajes: 139
Antigüedad: 17 años
Puntos: 1
python y mysql

hola que tal maestros, tengo una pequeña duda, para reutilizar un pequeño codigo que tengo en php y poder trasladarlo a python he aqui:

PHP:

$kery = "SELECT Fecha FROM tris_classic";
$hacer_kery = mysql_query($kery) or die(mysql_error());

$ind=0;
while($Q = mysql_fetch_array($hacer_kery))
{
if($fecha != $Q['Fecha'])
{
$query = "INSERT INTO tris_classic (Fecha, No1, No2, No3, No4, No5) VALUES('$fecha','$numero[0]','$numero[1]','$numero[2]','$numero[3]','$numero[4]')";
$hacer_query = mysql_query($query);

if(!$hacer_query)
ERROR!!
}

Python:

keri = 'SELECT Fecha FROM tris_classic;'
C.execute(keri)
res = C.fetchall()

fecha = raw_input('Introduce Fecha yyyy-mm-dd:')
while not fecha:
fecha = raw_input('Introduce Fecha yyyy-mm-dd:')

num = raw_input('Introduce el número:')
numero = list(num)
while not numero or len(numero) <> 5:
num = raw_input('Introduce el numero:')
numero = list(num)

while(res):
if fecha <> res[0]:
otrokeri = '''INSERT INTO tris_classic (Fecha, No1, No2, No3, No4, No5)
VALUES('fecha','numero[0]','numero[1]','numero[2]','numero[3]','numero[4]');'''
C.execute(otrokeri)
print 'Actualización Exitosa!!!'
elif fecha == res['Fecha']:
print 'Ya existe ese registro!!!'
return
else:
menu()

y mi problema radica en el while(res) ya que no hallo la forma de hacer el mysql_fetch_array() de php, a menos que ya se haya hecho en el C.fetchall()...pero como lo pongo...ayuda por favor...gracias de antemano
__________________
----------------------------------------------------------
Algunas cosas simplemente son bellas...por que uno no puede tenerlas...
  #2 (permalink)  
Antiguo 06/08/2009, 12:21
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: python y mysql

Código python:
Ver original
  1. keri = 'SELECT Fecha FROM tris_classic;'
  2. C.execute(keri)
  3. res = C.fetchall()
  4.  
  5. fecha = ""
  6. while not fecha:
  7.     fecha = raw_input('Introduce Fecha yyyy-mm-dd:')
  8.  
  9. num = raw_input('Introduce el número:')
  10. numero = list(num)
  11. while not numero or len(numero) != 5:
  12.     num = raw_input('Introduce el numero:')
  13.     numero = list(num)
  14.  
  15. for i in res:
  16.     if fecha != i[0]:
  17.         otrokeri = "INSERT INTO tris_classic (Fecha, No1, No2, No3, No4, No5) VALUES('%s','%s','%s','%s','%s','%s');" % (fecha, numero[0], numero[1], numero[2], numero[3], numero[4])
  18.         C.execute(otrokeri)
  19.         print 'Actualización Exitosa!!!'
  20.     else:
  21.         print 'Ya existe ese registro!!!'

Por favor trata de usar la etiqueta [HIGHLIGHT="python"]Aqui va el codigo[/HIGHLIGHT no olvides el corchete del final yo se lo quite para que apareciera :p
  #3 (permalink)  
Antiguo 06/08/2009, 14:12
 
Fecha de Ingreso: diciembre-2007
Ubicación: Frente al ordenador...
Mensajes: 139
Antigüedad: 17 años
Puntos: 1
Respuesta: python y mysql

ke tal razpeitia, gracias por tu respuesta, pero oye...al ejecutar el codigo me sale un error, en lo que seria mi problema...y se lo quite para probar lo demás pero al hacer el query parece que lo realiza pero no inserta en la tabla... que puede ser???
__________________
----------------------------------------------------------
Algunas cosas simplemente son bellas...por que uno no puede tenerlas...
  #4 (permalink)  
Antiguo 07/08/2009, 12:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: python y mysql

Interesante, pero cual es el error?

Si puedes tambien postea el codigo completo :p
  #5 (permalink)  
Antiguo 07/08/2009, 15:43
 
Fecha de Ingreso: diciembre-2007
Ubicación: Frente al ordenador...
Mensajes: 139
Antigüedad: 17 años
Puntos: 1
Respuesta: python y mysql

import MySQLdb
import sys
import datetime
db=MySQLdb.connect(host='localhost',user='root',pa sswd='pass',db='pruebas')
C=db.cursor()

#--------------------------------------------------------------------------
def menu(N):
opc = int(N)

if opc == 1:
num = raw_input('Cuantos quieres mostrar?: ')
mostrar_tabla(int(num))
elif opc == 2:
actualizar()
else:
sys.exit()

#--------------------------------------------------------------------------
def mostrar_tabla(N):
keri = 'SELECT * FROM tabla ORDER BY Fecha DESC;'
C.execute(keri)
res = C.fetchall()
num = int(N)
x = c_nc(num)
i=0

while i < num -1 :
print res[i][0],'|',res[i][1],res[i][2],res[i][3],res[i][4],res[i][5],'|',centro_no(res[i][1]),centro_no(res[i][2]),centro_no(res[i][3]),centro_no(res[i][4]),centro_no(res[i][5]),'|',arriba_abajo(res[i][1]),'|',uno_dos(arriba_abajo(res[i][2]),arriba_abajo(res[i][3])),'*',uno_dos(arriba_abajo(res[i][4]),arriba_abajo(res[i][5])),'|',x[0][i],'|',x[1][i]
i = i + 1

#---------------------------------------------------------------------------
def actualizar():
#keri = 'SELECT * FROM tabla1;'
#C.execute(keri)
#res = C.fetchall()
n = []
i = 0

anio = ""
mes = ""
dia = ""
while not anio or not mes or not dia:
anio = int(raw_input('Introduce anio:'))
mes = int(raw_input('Introduce mes:'))
dia = int(raw_input('Introduce dia:'))


dait = datetime.date(anio,mes,dia)

num = raw_input('Introduce el numero:')
numero = list(num)
n = []

while not numero or len(numero) != 5:
num = raw_input('Introduce el numero:')
numero = list(num)

i=0
while i < len(numero):
n.append(int(numero[i]))
i += 1

#aquí cambie el query para probar la insercion...parece que la realiza pero no inserta realmente en la tabla, tampoco como el codigo que habias puesto...

otrokeri = "INSERT INTO tabla(Fecha, No1, No2, No3, No4, No5) VALUES('2009-08-06', '1', '2', '3', '4', '5');"
C.execute(otrokeri)

#---------------------------------------------------------------------------
def arriba_abajo(N):
num = int(N)

if num < 5:
return 'a'
else:
return 'A'
#---------------------------------------------------------------------------
def centro_no(N):
num = int(N)

if num == 2 or num == 7:
return 'C'
elif num == 0 or num == 1 or num == 5 or num == 6:
return 'v'
else:
return '^'

#---------------------------------------------------------------------------
def uno_dos(N1,N2):
n1=N1
n2=N2

if n1 == 'a' and n2 == 'a':
return '1'

elif n1 == 'a' and n2 == 'A':
return '2'

elif n1 == 'A' and n2 == 'a':
return '3'
else :
return '4'
#---------------------------------------------------------------------------
def c_nc(N):
keri = 'SELECT * FROM tabla1 ORDER BY Fecha DESC;'
C.execute(keri)
res = C.fetchall()
x = int(N)

NUM = []
NUM1= []
NUM2= []
LIS = []
LIS1= []
LIS2= []
i=j=0
i2=1

while i < x:
NUM.append (uno_dos(arriba_abajo(res[i][2]), arriba_abajo(res[i][3])))
NUM1.append (uno_dos(arriba_abajo(res[i][4]), arriba_abajo(res[i][5])))
i += 1

NUM2.append(NUM)
NUM2.append(NUM1)

while j < x and i2 < x:
LIS.append(checar_c_nc(NUM2[0][j], NUM2[0][i2]))
LIS1.append(checar_c_nc(NUM2[1][j], NUM2[1][i2]))
j += 1
i2 += 1

LIS2.append(LIS)
LIS2.append(LIS1)

return LIS2
#---------------------------------------------------------------------------
def checar_c_nc(N1,N2):
n1 = N1
n2 = N2

if n1 == "1" and n2 == "4" or n1 == "4" and n2 == "1":
return 'C'
elif n1== "2" and n2 == "3" or n1 == "3" and n2 == "2":
return 'C'
else:
return '-'
#----------------------------------------------------------------------------

mostrar_tabla(3)

print 'MENU:'
print '1-->Mostrar mas Datos'
print '2-->Actualizar Datos'
print '3-->Salir'
opcion = raw_input("Que deseas hacer?: ")

menu(opcion)

he ahi el codigo, espero me puedas ayudar...
__________________
----------------------------------------------------------
Algunas cosas simplemente son bellas...por que uno no puede tenerlas...
  #6 (permalink)  
Antiguo 07/08/2009, 21:04
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: python y mysql

Por favor utiliza la etiqueta HIGHLIGHT, para que aparesca los espacios y el resaltado de la sintaxis.

Hice algunas correcciones y mejoras, espero que te ayude

Código python:
Ver original
  1. import MySQLdb
  2. import sys
  3. import datetime
  4.  
  5. db=MySQLdb.connect(host='localhost',user='root',passwd='pass',db='pruebas')
  6. C=db.cursor()
  7.  
  8. #--------------------------------------------------------------------------
  9. def menu(N):
  10.     opc = int(N)
  11.     if opc == 1:
  12.         num = raw_input('Cuantos quieres mostrar?: ')
  13.     mostrar_tabla(int(num))
  14.     elif opc == 2:
  15.         actualizar()
  16.     else:
  17.         exit()
  18.  
  19. #--------------------------------------------------------------------------
  20. def mostrar_tabla(N):
  21.     keri = 'SELECT * FROM tabla ORDER BY Fecha DESC;'
  22.     C.execute(keri)
  23.     res = C.fetchall()
  24.     num = int(N)
  25.     x = c_nc(num)
  26.     i=0
  27.     while i < num -1 :
  28.         print res[i][0],'|',res[i][1],res[i][2],res[i][3],res[i][4],res[i][5],'|',centro_no(res[i][1]),centro_no(res[i][2]),centro_no(res[i][3]),centro_no(res[i][4]),centro_no(res[i][5]),'|',arriba_abajo(res[i][1]),'|',uno_dos(arriba_abajo(res[i][2]),arriba_abajo(res[i][3])),'*',uno_dos(arriba_abajo(res[i][4]),arriba_abajo(res[i][5])),'|',x[0][i],'|',x[1][i]
  29.         i = i + 1
  30.  
  31. #---------------------------------------------------------------------------
  32. def actualizar():
  33.     #keri = 'SELECT * FROM tabla1;'
  34.     #C.execute(keri)
  35.     #res = C.fetchall()
  36.     n = [] #Lista vacia, bien
  37.     i = 0
  38.  
  39.     anio = ""
  40.     mes = ""
  41.     dia = ""
  42.     while not anio or not mes or not dia:
  43.         anio = int(raw_input('Introduce anio:'))
  44.         mes = int(raw_input('Introduce mes:'))
  45.         dia = int(raw_input('Introduce dia:'))
  46.  
  47.     dait = datetime.date(anio,mes,dia)
  48.  
  49.     num = raw_input('Introduce el numero:')
  50.     numero = list(num)
  51.     n = []#Misma lista vacia
  52.  
  53.     while not numero or len(numero) != 5:
  54.         num = raw_input('Introduce el numero:')
  55.         numero = list(num)
  56.  
  57.     i=0
  58.     while i < len(numero):
  59.         n.append(int(numero[i]))
  60.         i += 1
  61.     #Todo ese codigo lo simplificas son la siguiente orden
  62.     #n = [int(i) for i in numero]
  63.     #Mucho mas simple y pythonesco ;D
  64.  
  65.     #aquí cambie el query para probar la insercion...parece que la realiza pero no inserta realmente en la tabla, tampoco como el codigo que habias puesto...
  66.  
  67.     otrokeri = "INSERT INTO tabla(Fecha, No1, No2, No3, No4, No5) VALUES('2009-08-06', '1', '2', '3', '4', '5');"
  68.     C.execute(otrokeri)
  69.     db.commit() #Con esto ya va a insertar
  70.  
  71. #---------------------------------------------------------------------------
  72. def arriba_abajo(N):
  73.     num = int(N)
  74.     if num < 5:
  75.         return 'a'
  76.     else:
  77.         return 'A'
  78. #---------------------------------------------------------------------------
  79. def centro_no(N):
  80.     num = int(N)
  81.     if num == 2 or num == 7:
  82.         return 'C'
  83.     elif num == 0 or num == 1 or num == 5 or num == 6:
  84.         return 'v'
  85.     else:
  86.         return '^'
  87.  
  88. #---------------------------------------------------------------------------
  89. def uno_dos(N1,N2):
  90.     n1=N1
  91.     n2=N2
  92.  
  93.     if n1 == 'a' and n2 == 'a':
  94.         return '1'
  95.     elif n1 == 'a' and n2 == 'A':
  96.         return '2'
  97.     elif n1 == 'A' and n2 == 'a':
  98.         return '3'
  99.     else:
  100.         return '4'
  101. #---------------------------------------------------------------------------
  102. def c_nc(N):
  103.     keri = 'SELECT * FROM tabla1 ORDER BY Fecha DESC;'
  104.     C.execute(keri)
  105.     res = C.fetchall()
  106.     x = int(N)
  107.     NUM = []
  108.     NUM1= []
  109.     NUM2= []
  110.     LIS = []
  111.     LIS1= []
  112.     LIS2= []
  113.     i=j=0
  114.     i2=1
  115.  
  116.     while i < x:
  117.         NUM.append (uno_dos(arriba_abajo(res[i][2]), arriba_abajo(res[i][3])))
  118.         NUM1.append (uno_dos(arriba_abajo(res[i][4]), arriba_abajo(res[i][5])))
  119.         i += 1
  120.  
  121.     NUM2.append(NUM)
  122.     NUM2.append(NUM1)
  123.  
  124.     while j < x and i2 < x:
  125.         LIS.append(checar_c_nc(NUM2[0][j], NUM2[0][i2]))
  126.         LIS1.append(checar_c_nc(NUM2[1][j], NUM2[1][i2]))
  127.         j += 1
  128.         i2 += 1
  129.  
  130.     LIS2.append(LIS)
  131.     LIS2.append(LIS1)
  132.  
  133.     return LIS2
  134. #---------------------------------------------------------------------------
  135. def checar_c_nc(N1,N2):
  136.     n1 = N1 #Que caso tiene esto?
  137.     n2 = N2
  138.  
  139.     if n1 == "1" and n2 == "4" or n1 == "4" and n2 == "1":
  140.         return 'C'
  141.     elif n1== "2" and n2 == "3" or n1 == "3" and n2 == "2":
  142.         return 'C'
  143.     else:
  144.         return '-'
  145. #----------------------------------------------------------------------------
  146.  
  147. mostrar_tabla(3)
  148.  
  149. print 'MENU:'
  150. print '1-->Mostrar mas Datos'
  151. print '2-->Actualizar Datos'
  152. print '3-->Salir'
  153. opcion = raw_input("Que deseas hacer?: ")
  154.  
  155. menu(opcion)

Intenta hacer tu codigo mas pythonesco, usando for para iterar las listas, siguiendo los estandares, etc...
  #7 (permalink)  
Antiguo 07/08/2009, 21:59
 
Fecha de Ingreso: diciembre-2007
Ubicación: Frente al ordenador...
Mensajes: 139
Antigüedad: 17 años
Puntos: 1
Respuesta: python y mysql

Ea...muchisimas gracias razpeitia, ya funciona...y si, obviamente el ciclo for todavia no lo domino, es que estoy acostumbrado al de C :P...pero bueno, con unos ejemplos mas, estará domado...
__________________
----------------------------------------------------------
Algunas cosas simplemente son bellas...por que uno no puede tenerlas...
  #8 (permalink)  
Antiguo 06/09/2009, 11:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 1
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: python y mysql

Mis disculpas, estoy en inicios en Python. Es claro el ejemplo de Python y MySQL, aunquie tdebo interpretarlo mejor. Mi consulta es si este ejemplo es compatible con MySQL 5, Python 2.6, corriendo appache. Sino, si me pueden ayudar qué descargar para correr un ejemplo de MySQL así en esas condiciones o similares. Gracias.
  #9 (permalink)  
Antiguo 09/09/2009, 19:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: python y mysql

Hola

Me interesa realizar un código en python que trabaje con MySQL para implementarlo en varias terminales. El problema es que si un terminal realiza alguna consulta de inserción o actualización (evento), las demás terminales no lo registran sino hasta que vuelvan a solicitar la información.
Me interesa saber si existe alguna manera de que el servidor MySQL notifique a todas las conexiones activas acerca del evento.
Podría alguien darme alguna idea de donde, o con que criterio buscar. Alguna idea. Algo.

Muchas Gracias.
  #10 (permalink)  
Antiguo 09/09/2009, 19:59
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: python y mysql

jorge_k:
Completamente compatible con python 2.6 de hecho fue escrito en python 2.6.2


soft5vz
Creo que tu pregunta seria mejor contestada en el foro de MySql

La verdad no se si sea posible por que las bases de datos se basan en peticiones y respuestas (query and response).
Y para manejar eventos de una forma muy general es de la siguiente manera:
Código:
While(True){
    Switch(Event){
        ClickMouse:
        ....
        break;
        Presskey:
        ....
        break;
        MyEvent:
        ....
        break;
    }
}
Lo que implicaría estar haciendo querys constantemente.

A menos que utilices sockets teniendo asi 2 conexiones, la de la base de datos y una conectado a un servidor que hara un broadcast al resto de las conexiones que se produjo un evento y que necesitan actualizar.

Última edición por razpeitia; 10/09/2009 a las 19:03
  #11 (permalink)  
Antiguo 09/09/2009, 20:35
 
Fecha de Ingreso: septiembre-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: python y mysql

Había pensado algo así como poner un timer y consultar la base de datos constantemente pero me incrementaría el tráfico en la red por lo que no lo veo muy práctico.
Acerca del uso de sockets estaba pensando en intentar algo. Veré que puedo hacer.

Muchas gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:25.