0
我有以下類方法,是爲了運行數據庫語句:在使用Python的msilib- UPDATE語句失敗,錯誤2259
class CDatabaseModifier(object):
def __init__(self, database):
""" Constructor gets database
"""
self._database = database
def RunStatement(self, statement):
""" Runs statement on database
"""
view = self._database.OpenView(statement)
view.Execute(None)
view.Close()
self._database.Commit()
這適用於INSERT INTO
和DELETE
語句,但由於某種原因,我不斷收到MSIError 2259
例外,當我嘗試運行UPDATE
語句字符串作爲參數SET
。例如:
import msilib
db = msilib.OpenDatabase(r'C:\some\path\to\msi\bar.msi', msilib.MSIDBOPEN_DIRECT)
m = CDatabaseModifier(db)
m.RunStatement("UPDATE AppId SET ActivateAtStorage = 66 WHERE AppId = 'aaa'") # works OK
m.RunStatement("UPDATE AppId SET AppId = 'ccc' WHERE AppId = 'bbb'") # throws MSIError: 1: 2259 2
m.RunStatement("INSERT INTO AppId (AppId, RemoteServerName) VALUES ('foo', 'bar')") # works OK
更多信息: 在AppId
表ActivateAtStorage
列是short
類型,AppId
和RemoteServerName
列string
類型。
它說here該2259錯誤意味着
數據庫:[2]表(一個或多個)更新失敗。查詢必須遵守受限制的Windows Installer SQL語法。
因爲UPDATE語句的語法接合權,我不知道我在做什麼錯。任何幫助,將不勝感激。