![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Румата Эсторский |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 2.2.2011 Пользователь №: 2388 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день (или другое время суток)!
Есть проблема: нужно вставить в таблицу MySQL из Qt много записей (несколько миллионов), когда написал прогу оказалось, что QSqlQuery::execBatch() работает медленно будто вставляет не пакетом, а по одной записи. В документации написано, что если БД не поддерживает пакетную вставку, то действительно будет вставляться по одной записи. Я удивился, т.к. MySQL ПОДДЕРЖИВАЕТ пакетную вставку, из PHP с этим же сервером пакетная вставка отлично работает. Но qDebug() << db.driver()->hasFeature(QSqlDriver::BatchOperations); действительно выдает ложь. ВОПРОС: как заставить драйвер Qt MYSQL понять, что пакетная вставка поддерживается??? Очень не хочется собирать запрос как строку, т.к. при этом нужно экранировать спец. символы, и делать много ненужных движений. |
|
|
![]() |
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
1) открыть транзакцию
2) в цикле вставить, причём можно вставлять сразу по 100 (к примеру) записей за запрос - синтаксис известен http://phpclub.ru/mysql/doc/insert.html
3) коммит попробуй ![]() Сообщение отредактировал Алексей1153 - 19.3.2011, 10:45 |
|
|
Румата Эсторский |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 2.2.2011 Пользователь №: 2388 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
1) открыть транзакцию 2) в цикле вставить, причём можно вставлять сразу по 100 (к примеру) записей за запрос - синтаксис известен http://phpclub.ru/mysql/doc/insert.html
3) коммит попробуй ![]() Да, не найдя ответа я тоже склепал запрос вручную как строку, пришлось писать метод экранирования спец. символов, но мне кажется, что самому делать запросы на вставку не есть гуд (кроме очень специальных случаев). И очень обидно за Qt, который явно плохо дружит с MySQL: 1) модели не поддерживают типы MySQL: ENUM, SET, Year и Bit, (пришлось наследовать и делать делегаты), 2) QSqlField странно переводит некоторые типы MySQL в типы QMetaType 3) пакетная вставка не работает, хотя по идее должна... может я не прав, но вот пока такое впечатление |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 15:52 |