我有以下用于运行数据库语句的类方法:
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
语句,但由于某些原因,当我尝试使用 string <运行MSIError 2259
语句时,我会收到UPDATE
个例外/ strong>作为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语句的语法接合正确,所以我不知道我做错了什么。任何帮助将不胜感激。
答案 0 :(得分:1)