2011-06-07 5 views
2

J'ai deux bases de données. Un avec MSSQL et un autre avec Postgresql. Je veux que mon script python soit en cours d'exécution (pour cela j'utilise un travail cron sur Linux), tous les jours. Les données de la base de données MSSQL doivent être copiées dans la base de données Postgresql. J'ai une idée mais ça ne marche pas. Pourriez-vous m'aider??? Peut-être que ma solution est tout à fait tort ...copier des données de la base de données MSSQL vers la base de données Postgresql avec Python

C'est mon code:

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: le request_proc fonctionne très bien.

Répondre

1

Si le code ne génère pas d'erreurs mais que les enregistrements insérés n'apparaissent pas dans la base de données Postgresql, vous devrez probablement ajouter self.conn2.commit() après l'exécution de l'instruction INSERT. Cela validera chaque transaction dans la base de données.

Selon le documentation, il est également possible d'activer les transactions automatiques.

Questions connexes