Skip to main content
 首页 » 编程设计

python之使用 Python 将数据从 MSSQL 数据库复制到 Postgresql 数据库

2025年05月04日9daizhj

我有两个 2 数据库。一个使用 MSSQL,另一个使用 Postgresql。 我希望我的 python 脚本每天都在运行(为此我在 linux 上使用 cron-job)。 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 工作正常。

请您参考如下方法:

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

根据documentation , 也可以启用自动交易。