crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Пакетная вставка в MySQL
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Румата Эсторский Дата 20.3.2011, 15:30
 
Цитата(Алексей1153 @ 19.3.2011, 10:41) *
1) открыть транзакцию
2) в цикле вставить, причём можно вставлять сразу по 100 (к примеру) записей за запрос - синтаксис известен
http://phpclub.ru/mysql/doc/insert.html

insert into table
(a,b,c)
values
(1,2,3),
(4,5,6),
...
(7,8,9);

3) коммит

попробуй :)


Да, не найдя ответа я тоже склепал запрос вручную как строку, пришлось писать метод экранирования спец. символов, но мне кажется, что самому делать запросы на вставку не есть гуд (кроме очень специальных случаев).

И очень обидно за Qt, который явно плохо дружит с MySQL:
1) модели не поддерживают типы MySQL: ENUM, SET, Year и Bit, (пришлось наследовать и делать делегаты),
2) QSqlField странно переводит некоторые типы MySQL в типы QMetaType
3) пакетная вставка не работает, хотя по идее должна...

может я не прав, но вот пока такое впечатление
Алексей1153 Дата 19.3.2011, 10:41
  1) открыть транзакцию
2) в цикле вставить, причём можно вставлять сразу по 100 (к примеру) записей за запрос - синтаксис известен
http://phpclub.ru/mysql/doc/insert.html

insert into table
(a,b,c)
values
(1,2,3),
(4,5,6),
...
(7,8,9);

3) коммит

попробуй :)
Румата Эсторский Дата 18.3.2011, 12:56
  Добрый день (или другое время суток)!

Есть проблема: нужно вставить в таблицу MySQL из Qt много записей (несколько миллионов), когда написал прогу оказалось, что QSqlQuery::execBatch() работает медленно будто вставляет не пакетом, а по одной записи. В документации написано, что если БД не поддерживает пакетную вставку, то действительно будет вставляться по одной записи. Я удивился, т.к. MySQL ПОДДЕРЖИВАЕТ пакетную вставку, из PHP с этим же сервером пакетная вставка отлично работает.
Но qDebug() << db.driver()->hasFeature(QSqlDriver::BatchOperations); действительно выдает ложь.

ВОПРОС: как заставить драйвер Qt MYSQL понять, что пакетная вставка поддерживается???
Очень не хочется собирать запрос как строку, т.к. при этом нужно экранировать спец. символы, и делать много ненужных движений.

Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 25.4.2024, 15:55