Как сбросить данные, и только данные, а не схему, некоторых таблиц SQLite3 базы данных (не всех таблиц)? Дамп должен быть в формате SQL, так как он должен быть легко повторно введен в базу данных позже и должен быть выполнен из командной строки. Что-то вроде
sqlite3 db .dump
но без выгрузки схемы и выбора таблиц для выгрузки.
Ответы:
Вы не говорите, что вы хотите сделать с сохраненным файлом.
Я бы использовал следующее, чтобы получить файл CSV, который я могу импортировать практически во все
Если вы хотите переустановить в другую базу данных SQLite, то:
источник
Вы можете сделать это, получая разницу команд .schema и .dump. например с помощью grep:
data.sql
файл будет содержать только данные без схемы, примерно так:Я надеюсь, это поможет вам.
источник
sqlite3 some.db < data.sql
sqlite3 storage/db/jobs.s3db .schema jobs > schema.sql
не работает, ноecho '.schema' jobs | sqlite3 storage/db/jobs.s3db > schema.sql
работает нормально);
, и grep удаляет все строки, содержащие.);
Добавление-x
опции к grep решает эту проблему.Не лучший способ, но при аренде не нужны внешние инструменты (кроме grep, который в любом случае является стандартным для * nix)
но вам нужно выполнить эту команду для каждой таблицы, которую вы ищете.
Обратите внимание, что это не включает схему.
источник
sqlite3 Database.s3db .dump
grep -v '^CREATE'
как предложено в одном из других ответовgrep -v '^CREATE;
будет прерываться, если вCREATE
операторах есть разрывы строк (что они иногда делают). Лучше всего, IMO, не автоматическиCREATE
удалять операторы, а вручную редактировать их. Просто используйте любой текстовый редактор, который вам нужен, и найдитеCREATE
и удалите эти операторы вручную. Пока база данных не огромна (а поскольку вы используете sqlite, я думаю, это примечание), это довольно просто.Вы можете указать один или несколько табличных аргументов для специальной команды .dump, например
sqlite3 db ".dump 'table1' 'table2'"
.источник
sqlite3 3.31.1 (2020/01/27)
. История изменений ничего не говорит об этом. (Кстати,--preserve-rowids
работает, но совсем не задокументировано.)Любой ответ, который предлагает использовать grep, чтобы исключить
CREATE
строки или просто захватитьINSERT
строки изsqlite3 $DB .dump
вывода, потерпит неудачу. ВCREATE TABLE
список команд один столбец в каждой строке (так , исключаяCREATE
не получите все это), и значения наINSERT
линии могут иметь встроенные символы новой строки (так что вы не можете получить только теINSERT
строки).Протестировано на sqlite3 версии 3.6.20.
Если вы хотите исключить определенные таблицы, вы можете отфильтровать их
$(sqlite $DB .tables | grep -v -e one -e two -e three)
, или если вы хотите получить определенное подмножество, замените его наone two three
.источник
В качестве улучшения ответа Пола Игана это можно сделать следующим образом:
--или--
Предостережение, конечно, в том, что вам нужно установить grep.
источник
cat database.sql | grep '^INSERT' > database_inserts.sql
(то же самое для схемы, замените наgrep '^CREATE'
grep '^INSERT' < database.sql > database_inserts.sql
чтоcat
это лишнееcat
Не стоит в принципе ничего , чтобы выполнить и делает цепь входа к выходу намного понятнее. Конечно, вы также можете написать,< database.sql grep '^INSERT' ...
но явный канал намного легче читать.В Python или Java или любом другом языке высокого уровня .dump не работает. Нам нужно закодировать преобразование в CSV вручную. Я привожу пример с Python. Другие, примеры будут оценены:
Если у вас есть данные панели, другими словами, многие отдельные записи с идентификаторами добавляют это к внешнему виду, а также выводит сводную статистику:
источник
В соответствии с документацией SQLite для командной строки. Для SQLite вы можете экспортировать таблицу SQLite (или часть таблицы) как CSV, просто установив для «mode» значение «csv», а затем выполните запрос для извлечения нужных строк Таблица:
Затем с помощью команды «.import» импортируйте данные CSV (значения, разделенные запятыми) в таблицу SQLite:
Пожалуйста, прочтите дополнительную документацию о двух рассматриваемых случаях: (1) таблица «tab1» ранее не существует и (2) таблица «tab1» уже существует.
источник
Лучший способ - взять код, который будет делать дамп sqlite3 db, за исключением частей схемы.
Пример псевдокода:
Видеть:
src/shell.c:838
(для sqlite-3.5.9) для актуального кодаВы можете даже взять эту оболочку, закомментировать части схемы и использовать ее.
источник
Обзор других возможных решений
Включить только ВСТАВКИ
Легко реализовать, но не получится, если в любой из ваших столбцов появятся новые строки
Режим вставки SQLite
Это хорошее и настраиваемое решение, но оно не работает, если у ваших столбцов есть объекты BLOB-объектов типа Geometry в пространственном объекте.
Diff the dump со схемой
Не знаю почему, но у меня не работает
Другое (новое) возможное решение
Возможно, нет лучшего ответа на этот вопрос, но тот, который мне подходит, это grep вставки, принимая во внимание, что это новые строки в значениях столбцов с таким выражением
Для выбора таблиц
.dump
допускается использование аргумента LIKE для соответствия именам таблиц, но если этого недостаточно, возможно, лучше использовать простой скриптили что-то более продуманное, чтобы уважать внешние ключи и инкапсулировать весь дамп только в одной транзакции
Учтите, что выражение grep не будет выполнено, если
);
в каком-либо из столбцов присутствует строкаВосстановить его (в базе данных с уже созданными таблицами)
источник
Эта версия хорошо работает с символами новой строки внутри вставок:
sqlite3 database.sqlite3 .dump | grep -v '^CREATE'
На практике исключаются все строки, начинающиеся с
CREATE
которых с меньшей вероятностью содержат переводы строкисточник
Ответ от retracile должен быть самым близким, но он не работает для моего случая. Один запрос вставки просто сломался в середине, и экспорт просто остановился. Не уверен, в чем причина. Однако во время работы
.dump
.Наконец, я написал инструмент для разделения SQL, сгенерированного из
.dump
:https://github.com/motherapp/sqlite_sql_parser/
источник
Вы можете сделать выбор в таблицах, вставляя запятые после каждого поля, чтобы создать CSV, или использовать инструмент GUI, чтобы вернуть все данные и сохранить их в CSV.
источник