2011-06-07 74 views
2

我有两个2数据库。一个使用MSSQL,另一个使用Postgresql。 我希望我的Python脚本每天都在运行(为此我在Linux上使用cron-job)。 来自MSSQL数据库的数据应该复制到Postgresql数据库。我有一个想法,但它不起作用。你可以帮帮我吗???也许我的解决方案是完全错误的......将数据从MSSQL数据库复制到使用Python的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工作正常。

回答

1

如果代码没有产生错误,但插入的记录没有出现在Postgresql数据库中,那么在执行INSERT语句后,最有可能需要添加self.conn2.commit()。这会将每个事务提交到数据库。

根据documentation,还可以启用自动事务处理。

相关问题