Сценарий Python для сравнения одной таблицы в двух разных базах данных - PullRequest
0 голосов
/ 30 марта 2011

Я собираюсь написать скрипт на python, который поможет мне переносить данные между разными версиями одного и того же приложения.

Прежде чем я начну, я хотел бы знать, есть ли сценарий или модуль, который делает что-то подобное, и я могу либо использовать, либо использовать в качестве отправной точки для прокрутки, по крайней мере, своего собственного. Идея состоит в том, чтобы преобразовать данные между конкретными таблицами, а затем сохранить их как операторы SQL INSERT для применения к базе данных более ранней версии.

Примечание. Этот сценарий не является устойчивым к изменениям схемы

Обычно логика была бы чем-то вроде

def diff_table(table1, table2):
    # return all rows in table 2 that are not in table1
    pass

def persist_rows_tofile(rows, tablename):
    # save rows to file
    pass

dbnames=('db.v1', 'db.v2')
tables_to_process = ('foo', 'foobar')

for table in tables_to_process:
    table1 = dbnames[0]+'.'+table
    table2 = dbnames[1]+'.'+table
    rows = diff_table(table1, table2)

    if len(rows):
        persist_rows_tofile(rows, table)

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

Какие-нибудь советы о том, как добавить SqlAlchemy и как вообще улучшить такой скрипт?

Ответы [ 2 ]

0 голосов
/ 12 октября 2013

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

http://www.tylerlesmann.com/2009/apr/27/copying-databases-across-platforms-sqlalchemy/

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

0 голосов
/ 30 марта 2011

Для перемещения данных между двумя базами данных я использую pg_comparator .Это как diff и patch для sql!Вы можете использовать его для смены порядка столбцов, но если вам нужно разделить или объединить столбцы, вам нужно использовать что-то другое.

Я также использую его для асинхронного дублирования базы данных.Задание cron запускается каждые пять минут и помещает все изменения в базе данных «master» в базы данных «slave».Особенно удобно, если вам нужно распределить только одну таблицу или не все столбцы на таблицу и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...