Python и SQLite3 - импорт данных в существующую базу данных - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать кнопки «импорт» и «экспорт» в моей программе - используя небольшую адаптацию метода здесь .Однако я считаю, что функция импорта будет работать только в том случае, если таблицы в базе данных еще не существуют.В идеале, я хочу, чтобы функция копировала все данные в таблицы, независимо от того, существуют они или нет.

Например, допустим, у нас был «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 голосов
/ 20 февраля 2019

Если вы изучите файл экспорта, вы должны увидеть операторы CREATE TABLE и INSERT INTO для каждой таблицы / строки в базе данных.Я ожидаю, что importDB потерпит неудачу на первом конфликтующем «CREATE TABLE».

Функциональность дампа sqlite не предназначена для синхронизации баз данных. python doc на iterdump говорит: " Эта функция предоставляет те же возможности, что и команда .dump в оболочке sqlite3. ". sqlite doc на .dump говорит, что он дает вам то, что вам нужно " для восстановления базы данных позднее или на другом компьютере. "

С момента экспортаФайл представляет собой обычный текстовый файл, возможно, вы можете разобрать в полезный инструмент синхронизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...