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.