копировать данные из базы данных MSSQL в базу данных Postgresql с помощью Python - PullRequest
2 голосов
/ 07 июня 2011

У меня есть две базы данных. Один с MSSQL, а другой с Postgresql. Я хочу, чтобы мой скрипт на python работал (для этого я использую cron-job в linux) каждый день. Данные из базы данных MSSQL должны быть скопированы в базу данных Postgresql. У меня есть идея, но она не работает. Не могли бы вы помочь мне??? Может быть, мое решение совершенно неверно ...

Это мой код:

import pymssql, psycopg2

class DatabaseRequest:

    def __init__(self):
        self.conn1 = pymssql.connect(host='****', user='****', password='****', database='****')
        self.conn2 = psycopg2.connect("dbname='****' user='****' host='*****' password='****'")

        self.cur1 = self.conn1.cursor()
        self.cur2 = self.conn2.cursor()

    def request_proc(self, rows):
        self.cur1.execute("SELECT top 10  tag, site, plant, unit, line, ProcessID AS pid, Count(ReadTime) AS mods \
                        FROM ( \
                        select dateadd(dd, -1, convert(varchar, getDate(),111)) \
                        as tag, ReadTime, processID, subid, PR.Site, PR.Plant, PR.Unit, PR.Line \
                        from FactBarcodeReading BCR with(nolock) \
                        inner join DimProcess PR on BCR.ProcessKey = PR.ProcessKey \
                        where PR.ProcessID IN  (802, 1190, 1800, 3090, 3590, 4390, 4590, 4800, 5000, 5400, 4190) \
                        and ReadTime between dateadd(dd, -1, convert(varchar, getDate(),111)) and dateadd(dd, -0, convert(varchar, getDate(),111)) \
                        ) a \
                        GROUP BY tag, site, plant, unit, line, ProcessID \
                        ORDER BY site, plant, unit, line, ProcessID")

        rows = self.cur1.fetchone()

       # return rows   


    def insert_proc(self):
        self.cur2.execute("INSERT INTO 20091229global (proddate, site, plant, unit, line, pid, mods) \
                        VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"
                        % self.cur1.fetchone())


        a = DatabaseRequest()
        print a.insert_proc()

PS: request_proc работает нормально.

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Если код не выдает ошибок, но вставленные записи не появляются в базе данных Postgresql, вам, скорее всего, нужно добавить self.conn2.commit() после выполнения оператора INSERT.Это будет фиксировать каждую транзакцию в базе данных.

В соответствии с документацией также возможно включить автоматические транзакции.

0 голосов
/ 20 марта 2018

вам также нужно передать курсор (cur1) в insert_proc ->

def insert_proc(self, cur1):
  self.cur2.execute("INSERT INTO 20091229global (proddate, site, plant, unit, line, pid, mods) \
                        VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"
                        % self.cur1.fetchone())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...