with tutorial framework español djangoproject desde con cero applications python sql-server insert pyodbc

tutorial - actualizar solo el último registro de Python



tutorial django (1)

Soy un usuario novato de Python y por alguna razón la siguiente actualización no funciona.

Lo que espero es que se actualice usando una extracción de API y cuando uso la impresión muestra exactamente lo que espero, 5 registros. Estos son 2 archivos XML separados que luego se procesan y contienen estos 5 registros en total. Un XML tiene 3 filas, las otras 2 filas.

char01
char02
char03
char04
char05

El código utiliza una URL que debe llenarse con un kyeID y un vCode. KeyID y vCode se almacenan en una tabla. Todo esto funciona bien Y cuando hago la impresión, imprime 5 registros separados.

Ahora lo que realmente hace es que cuando lo actualiza a SQL, solo el último registro se inserta 5 veces. No tengo idea de cómo puede pasar esto. Cuando hago una inserción, sin embargo, funciona perfectamente bien.

El resultado final en la base de datos es el último registro 5 veces:

char05
char05
char05
char05
char05

import pyodbc import time import tempfile import cPickle import zlib import os from os.path import join, exists from httplib import HTTPException import eveapi cnxn = pyodbc.connect(''DRIVER={SQL Server};SERVER=MyServer;DATABASE=TESTDB;Integrated Security=True'') cursor = cnxn.cursor() cursor.execute("SELECT keyID, vCode FROM characters_apikey") for row in cursor.fetchall(): sql_keyID = row.keyID sql_vCode = row.vCode api = eveapi.EVEAPIConnection() auth = api.auth(keyID=sql_keyID, vCode=sql_vCode) result2 = auth.account.Characters() for character in result2.characters: print (character.name) cursor.execute("update characters set characterName = ?, characterID = ?, corporationName =?, corporationID = ?, allianceID = ?, allianceName = ?, factionID = ?, factionName =? ;", (character.name, character.characterID, character.corporationName, character.corporationID, character.allianceID, character.allianceName, character.factionID, character.factionName)) cursor.commit()

¿Qué estoy haciendo mal aquí con esta actualización?


La llamada debería verse algo así como:

cursor.execute("update characters set characterName = ?, characterID = ?, corporationName =?, corporationID = ?, allianceID = ?, allianceName = ?, factionID = ?, factionName =? where keyID = ? and vCode = ?;", (character.name, character.characterID, character.corporationName, character.corporationID, character.allianceID, character.allianceName, character.factionID, character.factionName, row.keyID, row.vCode))

Solo un amable recordatorio de que te perdiste la cláusula where.