Как быстро добавить данные с сервера DB2 в sqlite, используя предпочтительно django, и если ничего другого, то только код на python

#python #sql #django #db2 #migrate

#python #sql #django #db2 #перенести

Вопрос:

Я пишу веб-сайт django, на котором есть несколько отчетов, которые извлекают данные на основе базы данных DB2. Поскольку у меня есть доступ только для чтения к этой базе данных, я хочу, чтобы данные из DB2 непрерывно добавлялись (или добавлялись с интервалом, скажем, в 20 минут) к базе данных sqlite, используемой django. Теперь я также совершенно новичок в python, поэтому я не понимаю, что мне следует использовать для этого. Есть ли какой-либо метод django, который может быть реализован, или я должен написать скрипт только на python для копирования данных.

Допустим, у меня есть база данных с полями — DEAL, BUSINESS, CUSTID, REPID, REPNAME в DB2 (у меня здесь нет никакого первичного ключа, поскольку база данных очень старая). Я хочу постоянно копировать эти данные из DB2 в Sqlite. Каким должен быть самый простой код?

Пожалуйста, помогите.

Ответ №1:

Имейте в виду, что Db2 для Linux, Unix Windows, Db2 для zOS, Db2 для IBM i и Db2 Warehouse все разные внутри, поэтому, если вам нужна дополнительная информация, укажите тип и версию Db2.

Для периодического перемещения данных у вас есть много вариантов. предложение @Iakovos_Belonias является одним из них. Вашей главной задачей будет распознавание новых строк, изменяемых строк и удаляемых строк. Если исходная таблица не очень большая, вы можете скопировать ее полностью, но если исходная таблица большая, вам придется попробовать более умный механизм. Если это так, пожалуйста, оставьте комментарий или откройте новый вопрос.

Для перемещения данных в режиме, близком к реальному времени, лучшим вариантом является использование приложения для сбора данных изменений (CDC), такого как IBM Infosphere Data Replication или Oracle Golden Gate, среди прочих. Я думаю, что не существует бесплатного приложения CDC (за исключением лицензий с ограничениями, которые не будут покрывать ваши потребности), и коммерческие приложения CDC предлагаются для версий Db2, которые все еще не поддерживаются.

Я надеюсь, что это поможет…

Комментарии:

1. Спасибо за ваш подробный ответ, я действительно обнаружил, что это дает мне некоторые указания. Как вы спросили о версии, сервер DB2 относится к серии IBM I, работающей на AS400. Я могу использовать только ODBC-соединения с этим сервером и никаких прямых подключений с любым драйвером (я пробовал некоторые драйверы python, возможно, была какая-то проблема с лицензией). Опять же, я хочу, чтобы все это было бесплатным, поэтому я думаю, что CDC не поможет. Я не могу распознать новые строки, поскольку DB2 не создан с временными метками, все, что я могу сделать, это выполнить команды sql для этого, которые могут помочь для новых строк, а может и нет.

2. Что ж, если вы можете подключиться к Db2 для IBM i (iSeries, AS / 400) через ODBC, это означает, что вы также можете подключиться через JDBC и можете использовать любой инструмент, который работает на ODBC / JDBC, включая большинство инструментов ETL (как бесплатных, так и платных). С другой стороны, разработчики старой школы IBM i создавали таблицы без ключа (они называют их физическими файлами) и создавали своего рода индекс представление с уникальным ключом (они называют их логическим файлом). Если вы можете определить, есть ли в этой конкретной таблице поверх нее «логический файл с ключом», то у вас есть уникальный индекс.

3. Что касается RRN, вы можете использовать его как PK, но имейте в виду, что если по какой-либо причине они реорганизуют таблицу (то, что они называют Reorganize physical file member), RRN изменится, поскольку записи изменят свое положение в таблице.

4. Просто дополнительный комментарий. Спросите владельца таблицы, является ли эта таблица (или физический файл) многомембранной… Multimember — это концепция, отсутствующая в других СУБД.

5. Большое спасибо за ваше драгоценное время на это, ваши комментарии прояснили многие концепции.

Ответ №2:

Комментарии:

1. Привет, спасибо за ваше драгоценное время на это. Я нашел то, чем вы поделились, действительно информативным. Если возможно, можете ли вы, пожалуйста, помочь мне, приведя какой-нибудь пример кода, напрямую связанный с моими требованиями? Я все же ценю вашу работу.

2. Привет, какой образец кода вам нужен?

3. Мне нужен был небольшой код, чтобы просто скопировать целую таблицу из IBM I Series DB2, используя odbc-соединение, в sqlite с некоторыми интервалами. Пусть это будет любой простой пример.

4. Если у вас есть готовый код, и вы хотите только периодически выполнять скрипт, тогда вам нужно задание cron. Найдите в Google свою ОС и как выполнить задание cron, и вы найдете множество простых примеров. Если бы у меня был какой-либо опыт работы с IBM, я бы точно сказал вам, что вы хотите, потому что у меня нет никакого опыта работы с этими системами, я не могу сказать вам наверняка, извините.

5. Нет проблем, я действительно ценю вашу помощь и поддержку здесь.