我正在尝试在程序中创建一个“导入”和“导出”按钮-稍微修改一下here的技巧。但是,我发现导入功能仅在数据库中的表不存在时才起作用。理想情况下,我希望该函数将所有数据复制到表中,而不管其是否存在。
例如,假设我们有“ myTable”,其中只有一个条目“ myRow1”。当我们导入“ myData”(其具有名为“ myTable”的表)并具有条目“ myRow2”和“ myRow3”时,结果应为“ myTable”将具有条目“ myRow1”,“ myRow2”和“ myRow3”。
这是我当前的代码:
def exportDB():
filePath, ok = QFileDialog.getSaveFileName(self, "Export file",
"./exports", "SQL files (*.sql)")
# QFileDialog provided by PyQt to allow user to select their own filepath
if ok:
with open(filePath, 'w') as file:
for line in connection.iterdump():
file.write('%s\n' % line)
def importDB():
filePath, ok = QFileDialog.getOpenFileName(self, "Import file",
"./exports", "SQL files (*.sql)")
if ok:
with open(filePath, 'r') as file:
data = file.read()
cursor.executescript(data)
答案 0 :(得分:0)
如果检查导出文件,则应该看到数据库中每个表/行的“ CREATE TABLE”语句和“ INSERT INTO”语句。我希望importDB在第一个冲突的“ CREATE TABLE”上失败。
sqlite转储功能不适用于同步数据库。 iterdump上的python doc说:“ 此功能提供的功能与sqlite3 shell中的.dump命令相同。”。 .dump上的sqlite doc说,它为您提供了“ 以后或在另一台机器上重建数据库。”
由于导出文件是纯文本文件,也许您可以解析到一个有用的同步工具中。