我需要读取msi文件并对其进行一些查询。但它看起来尽管它是python的标准库,但它很差documentation。 要进行查询,我必须知道数据库模式,我找不到任何从文件中获取它的示例或方法。
这是我正在努力工作的代码:
import msilib
path = "C:\\Users\\Paul\\Desktop\\my.msi" #I cannot share msi
dbobject = msilib.OpenDatabase(path, msilib.MSIDBOPEN_READONLY)
view = dbobject.OpenView("SELECT FileName FROM File")
rec = view.Execute(None)
r = v.Fetch()
rec
变量为None。但我可以使用InstEd工具打开MSI文件,并看到表格列表中存在该文件,并且那里有很多记录。
我做错了什么?
答案 0 :(得分:0)
您的代码是可疑的,因为最后一行会在您的示例中引发NameError。所以,让我们忽略这一行。
真正的问题是protected function getViewData($articles)
{
return [
'articles' => $articles,
'orientation' => $this->getOrientation(),
'subCategoriesWeb' => $this->getSubCategoriesWeb(),
'subCategories2d' => $this->getSubCategories2d(),
'subCategories3d' => $this->getSubCategories3d()
];
}
public function searchSubCategories($request)
{
// ...
return view('pages.blog', $this->getViewData($articles));
}
public function searchCategory($request)
{
// ...
return view('pages.blog', $this->getViewData($articles));
}
没有任何用处。在引擎盖下,MsiViewExecute函数仅返回成功或失败。在你打电话之后,你需要拨打view.Execute
,这可能就是你最后一行所要做的。