Problema con BD y python

Chema Cortes pych3m4 en gmail.com
Jue Dic 21 18:20:23 CET 2006


El 2006/12/21, javi lopez <javi80mix en gmail.com> escribió:
> Hola estoy haciendo un script para mi BD,  pero al ejecutarlo, siempre
> me copia el ultimo comentario, no me va recorriendo desde el primero
> al ultimo y no se que voy haciendo mal.Este es el codigo.Gracias por
> vuestra ayuda.

La verdad que es un poco incomprensible el código, pero voy a intentar
darte algunos consejos:

El primero es que intentes usar parámetros en lugar de construir las
sentencias SQL. Seguramente estés usando mysql con el xoops, pero a
veces, con gestores de bases de datos más sofisticados, es posible
cachear la ejecución con parámetros.

>
> cursor.execute("select * from BD limit 5")
>     filas = cursor.fetchall()
>     for row in filas:
>       if (row[1]!=0):
>             topicID = row[2]
>             PostID = row[0]
>             UIDcreation = "Javi"#row[5]
>             UIDmodifying = "Javi"#row[5]
>             ip = row[6]
>             cursor.execute("INSERT INTO zf_posts (topic_id,
> creation_user, modifying_user, ip_address) values
> ('%d','%s','%s','%s')" % (topicID, UIDcreation, UIDmodifying, ip))
>             cursor.execute("SELECT post_text FROM xoops_bb_posts_text
> WHERE post_id = %d" % (PostID))

Este SELECT aquí es decorativo. Otra cosa es que al operador formato %
se le pasa una tupla, y (PostID) no lo es. No pasa nada, pero es mejor
que pongas ó (PostID,) ó simplemente PostID.

> [[corto el código que no interesa]]

>           cursor.execute("UPDATE zf_posts, xoops_bb_posts_text SET
>zf_posts.content = xoops_bb_posts_text.post_text where
>xoops_bb_posts_text.post_id = ('%d') " % (PostID))
>             cursor.execute("SELECT post_text FROM xoops_bb_posts_text
> WHERE post_id = %d" % (PostID))
>
>             cadena = cursor.fetchone()[0]
>
>             cursor.execute("UPDATE zf_posts SET content = '%s'" %
> (unicode(cadena,'latin-1')))

No sé qué haces aquí, pero parece que zf_posts.content lo estás
machacando dos veces con el mismo valor. Lo que está claro es que es
donde 'cadena' toma por valor el comentario que luego se usa para
grabar el resto de comentarios. Por ahí está el fallo, en concreto
¿qué es el row[1] que se chequea en el if?




Más información sobre la lista de distribución Python-es