我终于设法编写了一个从sqlite数据库读取并向树视图显示结果的小应用程序。另一种形式(在另一个模块中)使您能够编写新记录或更新现有记录。写入数据库后,它关闭窗口
我现在想要做的是更新“主”窗口(包含树视图)以显示新的数据集。到目前为止,我已经设法做到这一点,但是a)初始主窗口停留在该窗口中,同时它的新实例在其顶部打开,并显示所需的(新)数据集。
我将如何进行这项工作?有人可以给我建议/示例吗?
也许我需要说的是__init__,我的mainwindow模块的功能在运行时会执行所有操作:创建gui,从数据库中读取并显示所有内容。我怀疑这可能是问题所在,但是尝试将其分解成多个部分(功能)的任何组合都没有成功
- 编辑 -
好的,我 现在有许多不同的功能来创建主GUI,而其他功能__init__ 则从数据库读取数据并将其放置在树形视图中。
我尝试使用计时器,但由于 没有这种方法,因此此选项似乎不合适gtk.TreeView 。
我已经尝试了很多天来找到这个问题的解决方案。我需要为 sqlite 数据库中的每条记录编写一个小 jpg 图像。最后,我设法插入了该文件,但从它作为原始文件而不是(压缩的)jpg 写入数据库的大小来看。我使用的代码是:
imgobj = Image.open('./fotocopies/checks/633.jpg')
con = sqlite3.connect("pybook.db")
cur = con.cursor()
cur.execute("UPDATE data_fotocopies SET fotocopy=? WHERE refid=633 and reftype=0", [ buffer(imgobj.tobytes()) ] )
Run Code Online (Sandbox Code Playgroud)
如果我尝试open该文件,则无法将其插入数据库,因此,以下代码:
imgobj = open('./fotocopies/checks/632.jpg')
con = sqlite3.connect("pybook.db")
cur = con.cursor()
cur.execute("UPDATE data_fotocopies SET fotocopy=? WHERE refid=632 and reftype=0", [sqlite3.Binary(imgobj)] )
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
cur.execute("UPDATE data_fotocopies SET fotocopy=? WHERE refid=632 and reftype=0", [sqlite3.Binary(imgobj)] )
TypeError: buffer object expected
Run Code Online (Sandbox Code Playgroud)
不幸的是,stackoverflow 中以前的答案没有涵盖我,因为我已经尝试了所有这些答案。此外,所有存储检索都必须通过 gtk3 接口完成,我怀疑这将意味着另一个(一系列)问题,即如何设置现有图像以从数据库响应中获取其数据等。任何人都可以帮忙吗?
我希望能够将整个sqlite数据库转储到文件(database.sql)中,以便将其用作备份。问题在于PHP中的exec()似乎无法正确运行“ .dump”命令,因为它仅给出“ COMMIT;”。结果,而不是全文:
$db = new SQLite3('checks_db.db');
$results=$db->exec('.dump');
$content=$results->fetchArray();
Run Code Online (Sandbox Code Playgroud)
如果我从sqlite3运行它,它将为模式和数据提供插入指令。也许我还应该提到该数据库具有777权限。谁能在php-sqlite3中写出'.dump'命令的语法示例?