Python和SQLite3-将数据导入现有数据库

时间:2019-02-19 14:34:44

标签: python sqlite

我正在尝试在程序中创建一个“导入”和“导出”按钮-稍微修改一下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)

1 个答案:

答案 0 :(得分:0)

如果检查导出文件,则应该看到数据库中每个表/行的“ CREATE TABLE”语句和“ INSERT INTO”语句。我希望importDB在第一个冲突的“ CREATE TABLE”上失败。

sqlite转储功能不适用于同步数据库。 iterdump上的python doc说:“ 此功能提供的功能与sqlite3 shell中的.dump命令相同。”。 .dump上的sqlite doc说,它为您提供了“ 以后或在另一台机器上重建数据库。

由于导出文件是纯文本文件,也许您可​​以解析到一个有用的同步工具中。