Сохранить результат sql запроса в файл

Для сохранения sql запроса в файл применяется оператор select с добавлением двух ключевых слов into outfile.

В общем виде синтаксис можно представить в следующем виде:

select name_tables into outfile from name_table

Ниже будет показано на примерах загрузка таблицы auto в файл auto.txt

id model year distance
1 Audi 2005 1000
2 Volvo 2005 15000
3 Fiat 2003 12300
4 Ford 2002 54000
5 Alfa Romeo 2005 20000

$connection = new mysqli("localhost","root","",’mybase’);
$query = "select * into outfile ‘c://auto.txt’ from auto";
$result = $connection->query($query);
?>

1 Audi 2005 1000° 2 Volvo 2005 15000° 3 Fiat 2003 12300° 4 Ford 2002 54000° 5 Alfa Romeo 2005 20000°

Файл будет создан, но все данные в нем будут записаны в одну строку, это происходит потому что по умолчанию между строками ставится символ перевода строки
, а для перевода строка в windows нужен еще символ перевода каретки
. Для решения этой проблемы в sql запрос добавляются ключевые слова – lines terminated by ‘

В этом примере будет получен файл auto.txt, где каждая строка из mysql таблицы будет начинаться с новой строки.

$connection = new mysqli("localhost","root","",’mybase’);
$query = "select * into outfile ‘c://auto.txt’ lines terminated by ‘
‘ from auto";
$result = $connection->query($query);
?>

Кроме разделителя строк можно задать разделитель столбцов (fields terminated by), определить символы ограничения полей (enclosed by), определить символы экранирования в полях (escaped by) и задать символы начала строки (starting by)

$connection = new mysqli("localhost","root","",’mybase’);
$query = "select * into outfile ‘c://auto.txt’ fields terminated by ‘,’ lines starting by ‘-‘ terminated by ‘
‘ from auto";
$result = $connection->query($query);
?>

-1,Audi,2005,1000
-2,Volvo,2005,15000
-3,Fiat,2003,12300
-4,Ford,2002,54000
-5,Alfa Romeo,2005,20000

Задача
Вы хотите экспортировать результаты запроса из MySQL в файл или в другую программу.

Читайте также:  1С скд выбранные поля программно

Решение
Воспользуйтесь предложением SELECT . INTO OUTFILE или перенаправьте вывод программы mysql.

Обсуждение
В MySQL можно использовать предложение SELECT . INTO OUTFILE для вывода результатов запроса непосредственно в файл на хосте сервера. Если же вы хотите получить результат на клиентском хосте, то есть другая возможность:

перенаправить вывод программы mysql. У каждого из этих методов есть свои сильные и слабые стороны, поэтому вам следует познакомиться с обоими и использовать тот, который больше подходит в конкретной ситуации.

Экспорт с помощью SELECT . INTO OUTFILE

Здесь используется обычное предложение SELECT, к которому добавлена конструкция INTO OUTFILE имя_файла. Формат вывода по умолчанию тот же, что и для LOAD DATA, так что следующее предложение экспортирует таблицу passwd в файл /tmp/passwd.txt с символами TAB и LF в качестве разделителей полей и строк:

mysql> SELECT * FROM passwd INTO OUTFILE ‘/tmp/passwd.txt’;

Для изменения формата вывода вы можете использовать опции, аналогичные тем, которые использовались в LOAD DATA для определения кавычек и разделителей столбцов и строк.

Чтобы экспортировать таблицу passwd в формате CSV с разделением строк символами CRLF, используйте такое предложение:

mysql> SELECT * FROM passwd INTO OUTFILE ‘/tmp/passwd.txt’
-> FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘"’
-> LINES TERMINATED BY ‘
‘;

Предложение SELECT . INTO OUTFILE обладает следующими свойствами:

• Выходной файл создается непосредственно сервером MySQL, поэтому имя файла должно соответствовать его желаемому расположению на серверном хосте. Не существует локальной версии этого предложения, аналогичной LOAD DATA LOCAL.

• Для выполнения предложения SELECT . INTO необходима привилегия FILE в MySQL.

• Нельзя использовать уже существующий файл. Это предохраняет от потери файлов, возможно, содержащих важную информацию.

• Вам потребуется учетная запись на сервере или другой способ для получения файла с этого хоста. Иначе предложение SELECT . INTO OUTFILE окажется для вас бесполезным.

Читайте также:  Старый друг лучше новых двух картинки

• В UNIX файл создается доступным для чтения всем, а его владельцем является сервер MySQL. Это означает, что, хотя вы и сможете прочитать его, у вас может не оказаться прав на его удаление.

Экспорт с помощью клиента mysql
Вследствие того, что предложение SELECT .

INTO OUTFILE записывает файл на хост сервера, вы не сможете использовать его, если у вашей учетной записи в MySQL нет привилегии FILE. Для экспорта данных в локальный файлтребуется другой подход. Если все, что вам нужно – это вывод данных, разделенных символами табуляции, можно воспользоваться «экспортом для бедных», выполняя предложение SELECT из программы mysql с перенаправленным в файл выводом. При таком способе вам не потребуется привилегия FILE для вывода результата запроса в файл. Вот пример, в котором экспортируются столбцы регистрационного имени и командного интерпретатора из ранее созданной таблицы passwd:

% mysql -e "SELECT account, shell FROM passwd" -N cookbook > shells.txt

Опция -e определяет выполняемый запрос, а -N сообщает MySQL, что не надо выводить строку заголовков столбцов, обычно предваряющую вывод.

Вторая опция была добавлена в MySQL 3.22.20; если у вас более старая версия, вы можете получить тот же результат, указав вместо нее опцию -ss, заставляющую mysql помолчать»:

% mysql -e "SELECT account, shell FROM passwd" -ss cookbook > shells.txt

Имейте в виду, что значения NULL выводятся в виде строки «NULL».

Возможно, потребуется выполнить некоторые преобразования в зависимости от того, как вы планируете использовать результат.

Перенаправив вывод результатов запроса в фильтр, заменяющий символы табуляции на другие разделители, можно получить выходные данные в формате, отличном от принятого по умолчанию. Например, чтобы использовать в качестве разделителя решетку, преобразуем символы TAB в # (строка TAB указывает то место в команде, где следует нажать клавишу табуляции):

Читайте также:  Требуется подтверждение чтобы посмотреть платежную информацию нажмите

% mysql -N -e "здесь ваш запрос" имя_БД | sed -e "s/TAB/#/g" > файл_вывода Для этих целей можно также использовать команду tr, хотя ее синтаксис может отличаться в разных реализациях. В системах Mac OS X или RedHat Linux команда выглядит так:

% mysql -N -e "здесь ваш запрос" имя_БД | tr " " "#" > файл_вывода

В приведенных командах mysql используются опции -N или -ss для удаления из выходных данных заголовков столбцов. В некоторых случаях эти заголовки могут пригодиться. (Например, они могут понадобиться при последующем импорте.) Тогда исключите из команды опцию их отмены. В этом смысле экспорт результатов запроса посредством mysql более гибок, чем с помощью предложения SELECT . INTO OUTFILE, так как в последнем отсутствует возможность вывода заголовков столбцов.

Как сделать чтоб эта строчка не выводила данные, а сохраняла их в xlsx . Хоть убей сообразить не могу.

Надо сохранить в таблицу данные с базы не могу сообразить как

1 ответ 1

Для того чтобы сохранить результат SQL запроса в Excel файл удобно будет воспользоваться модулем Pandas:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками mysql python sql excel или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.12.20.35703

Оцените статью
Добавить комментарий

Adblock detector