【问题标题】:update python last record only仅更新python最后一条记录
【发布时间】:2015-03-10 07:13:55
【问题描述】:

我是一个新手 python 用户,由于某种原因,下面的更新不起作用。

我期望它使用 API 拉取更新,当我使用打印时,它会准确显示我期望的 5 条记录。这些是 2 个单独的 XML 文件,这些文件随后被处理,总共包含这 5 条记录。一个 XML 有 3 行,另外 2 行。

char01
char02
char03
char04
char05

该代码使用了一个需要用 kyeID 和 vCode 填充的 URL。 keyID 和 vCode 存储在一个表中。这一切都很好。当我进行打印时,它会打印 5 条单独的记录。

现在它真正做的是当它更新到 SQL 时,只有最后一条记录被插入 5 次。我不知道这怎么会发生。但是,当我进行插入时,它工作得非常好。

数据库中的最终结果是最后一条记录5次:

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()

我在此更新中做错了什么?

【问题讨论】:

  • 您正在运行没有 WHERE 的 UPDATE,因此所有行都将被更新。
  • 谢谢,成功了。我用下面的例子来弄清楚。

标签: python sql-server insert pyodbc


【解决方案1】:

调用应该类似于:

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))

只是提醒您错过了 where 子句。

【讨论】:

  • 谢谢。这对我现在有效的解决方案帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多