Python - borrar registro BD Mysql Python

   
Vista:

borrar registro BD Mysql Python

Publicado por Alejandro Hernandez ahernandez0283@gmail.com (5 intervenciones) el 15/10/2012 06:37:27
Buenas. soy un novato en python y he intentado varias cosas para solucionar un problema.

1.) deseo borrar un registro de una Base de Datos el cual consulto primero y envio por socket a un server TCP. mio problema es que no lo hace. y estoy un 99.9999999% seguro que es por que lo estoy haciendo mal jejejeje aca les dejo el codigo completo para que entiendan bien el problema.

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
#!/usr/bin/env python
 
import MySQLdb, sys
import socket
 
 
 
host="localhost"
user="xxxx"
password="xxxx"
database="datos"
try:
    db=MySQLdb.Connect(host, user, password, database)
    cursor=db.cursor()
except:
    print "No se conecto a la Base"
while True:
        cursor.execute('select * from local')
        registro = cursor.fetchone()
        s = socket.socket()
        s.connect(("192.168.0.175", 20000))
        mensaje =(registro[1])
        print (mensaje)
        s.send(mensaje)
        s.close()
        cursor.execute("""DELETE FROM local  WHERE  datos=%s""",(mensaje))
        db.commit()


la linea que intenta borrar el registro que se consulto en un inicio, lo he intentado por muchas formas, y no he podido. Si ejecuto este codigo, el toma el primer registro de esa tabla y me lo envia bien al servidor tcp. pero cuando llega a la linea de borrar, sale error. por cada metodo que uso salen errores diferentes.

2.) el segundo problema es que el debe conectarse al server tcp y enviar el dato siempre y cuando encuentre algo dentro de la tabla, si no que se quede haciendo el loop en espera de que llegue algo a la base.

explico por que... esto es para un dispositvo que captura datos las 24/7.. es un dispositivo movil en concreto una rasberry PI. y gran parte del tiempo va estar recibiendo datos. pero existe la posibilida que dentro de la base pasen horas o dias sin que le lleguen datos, pero este debe seguir ejecutandose y si llega algo a la base, enviarlo.

gracias y perdonen tanta explicacion
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

borrar registro BD Mysql Python

Publicado por xve (1235 intervenciones) el 15/10/2012 07:52:37
Hola Alejandro, yo pondría un sleep en el código, ya que este bucle, puede estar haciendo muchas consultas por segundo a la base de datos...

Sobre tus problemas...

1.- la linea de eliminar creo que la tienes mal, tendría que ser algo así:
1
cursor.execute("""DELETE FROM local  WHERE  datos=%s""" % (mensaje))


2.- Para determinar si hay o no registros, simplemente puedes hacer esto:
1
2
3
4
5
6
cursor.execute('select * from test')
    registro = cursor.fetchone()
    if registro:
        ... hay registros
    else:
        ... no hay registros


Coméntanos, si te sirve, ok?
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

borrar registro BD Mysql Python

Publicado por Alejandro Hernandez ahernandez0283@gmail.com (5 intervenciones) el 15/10/2012 08:54:31
Buenas intente con la modificacion que me diste pero me salio error http://imageshack.us/a/img37/7917/16215974.jpg
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

borrar registro BD Mysql Python

Publicado por Alejandro Hernandez (5 intervenciones) el 15/10/2012 09:13:51
Lo del sleep por el bucle.. gracias es una muy buena idea por que por segundo intenta hacer muchas consultas a la BD y tambien muchas entrega eal sever TCP... solo espero primero solucionar lo de borrar el registro..

Pregunta.. no hay alguna manera que con python borre el primer registro que encuentre en la tabla, ya que el "fetchone" lo que hace es tomar ese primer registro. (lo pregunto por que otro de los errores que he visto es por tiempo exedido en alguna modificacion que he realizado. ademas el pc que esta ejecutando la aplicacion es una raspberry pi. la cual cuenta con un procesador ARM y 256 mb en ram.... lo cual no le puedo exigir mucho. y la tabla de donde saca los datos cuenta con mas de 6000 registro.. y en algunos momentos esa cantidad puede llegar a ser superior a los 100000)

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

borrar registro BD Mysql Python

Publicado por xve (1235 intervenciones) el 15/10/2012 13:55:56
Hasta donde yo se, tienes que hacer dos consultas o crear un store procedure en el mysql.

Python, solo ejecuta consultas sobre MySQL, no puede eliminar un registro sin un consulta SQL con DELETE... eso hasta donde yo se, no se si alguien conoce alguna otra manera.
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

borrar registro BD Mysql Python

Publicado por xve (1235 intervenciones) el 15/10/2012 13:53:32
Tienes razón, supongo que mensaje es un texto verdad? creo que le faltan las comillas...
1
cursor.execute("""DELETE FROM local  WHERE  datos='%s'""" % (mensaje))
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

borrar registro BD Mysql Python

Publicado por Alejandro Hernandez ahernandez0283@gmail.com (5 intervenciones) el 15/10/2012 17:38:40
Buenas. de verdad muchas gracias, si le hacian falta las comillas para que realizara el borrado del registro

1
cursor.execute("""DELETE FROM local  WHERE  datos='%s'""" % (mensaje))
.

en referencia a que python debe hacer una consulta primero antes de borrar, me quedaron muchas dudas, ya que lo que he leido en los manuales de python, no he encontrado referencia alguna a esto, sin embargo no se si igual lo estoy haciendo como indicaste ya que antes de borrar el registro, en el codigo, el hace una consulta y saca un registro y con el fetchone tomo uno solo que es con el que comparo y borro. en referencia a esto "tienes que hacer dos consultas o crear un store procedure en el mysql.". Porfa me podrias informar a que se refiere esto, ya que no me gusta quedarme con dudas, si es cierto que ya funciona, pero no es lo mismo poner a funcionar algo con algun codigo sin entenderlo, que entender el codigo y aprender lo que estas haciendo.

Nuevamente doy gracias ya que apesar de leer varios manuales de python y tutos de python y msql. no encontraba el porque del no funcionamiento bien de este. Aclaro. entiendo bien hasta este punto que hace el codigo. pero hay cosas como las '' que muchas veces se te pueden pasar por alto investigando solo en internet.

dejo las imagenes par amostrar lo que queria que realizara.


http://imageshack.us/a/img856/774/pi2w.jpg
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

borrar registro BD Mysql Python

Publicado por xve (1235 intervenciones) el 15/10/2012 18:51:06
Alejandro, intento comentarte...

Ahora mismo, primeramente haces una consulta sql (SELECT ...) y luego eliminar el registro (DELETE ...) y tu me preguntabas "hay alguna manera que con python borre el primer registro que encuentre en la tabla"

La respuesta es si, se puede hacer con un store procedure. Un store procedure, es un código de mysql que se ejecuta en el mismo servidor mysql, el cual puede hacer varias consultas a la base de datos, condicionales, variables, ... y devolver uno o varios valores, por lo que podría devolver el identificador con el que tienes que trabajar (cursor) y eliminar el registro, para que no tuvieras que hacerlo posteriormente.

http://dev.mysql.com/doc/refman/5.0/en/stored-programs-defining.html

Espero que me haya sabido explicar... si no es así coméntame, ok?
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

borrar registro BD Mysql Python

Publicado por Alejandro Hernandez ahernandez0283@gmail.com (5 intervenciones) el 15/10/2012 20:10:26
Si ya entendí.. muchas gracias. ya me pongo al estudio de este método para implementarlo. y generar un código mas eficiente en la aplicación.


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