python:從oracle同步數據到mysql


  1 # -*- coding: GBK -*-
  2 
  3 import cx_Oracle
  4 import MySQLdb
  5 import datetime
  6 
  7 ORACAL_HOST = "127.0.0.1"                           # oracle_數據庫ip
  8 ORACAL_PORT = 1521                                  # oracle_數據庫端口
  9 ORACAL_SID = "orcl"                                 # oracle_數據庫名稱
 10 ORACAL_USERNAME = "system"                          # oracle_數據庫用戶名
 11 ORACAL_PASSWORD = "root"                            # oracle_數據庫用戶密碼
 12 ORACAL_TABLE_NAME = "t_oracle"                      # oracle_數據庫表名
 13 ORACAL_DB_CHARSET = "gbk"                           # oracle_數據庫編碼
 14 
 15 MYSQL_HOST = "127.0.0.1"                            # mysql_數據庫ip
 16 MYSQL_PORT = 3306                                   # mysql_數據庫端口
 17 MYSQL_DB_NAME = "mysql_db"                          # mysql_數據庫名稱
 18 MYSQL_USERNAME = "root"                             # mysql_數據庫用戶名
 19 MYSQL_PASSWORD = "root"                             # mysql_數據庫用戶密碼
 20 MYSQL_TABLE_NAME = "t_mysql"                        # mysql_數據庫表名
 21 MYSQL_DB_CHARSET = "utf8"                           # mysql_數據庫編碼
 22 
 23 LOG_FILE_NAME = "SyncLog.txt"                       # 日志文件名稱
 24 
 25 data_from_oracle = []                               # 存放從oracle讀取的數據
 26 
 27 
 28 # 讀取oracle表
 29 def read_from_oracle():
 30     global ORACAL_HOST, ORACAL_PORT, ORACAL_SID, ORACAL_USERNAME, ORACAL_PASSWORD, ORACAL_TABLE_NAME
 31 
 32     dsn = cx_Oracle.makedsn(ORACAL_HOST, ORACAL_PORT, ORACAL_SID)
 33     printLog("Connect to oracle DB start, ORACAL_HOST:" + ORACAL_HOST + ", ORACAL_PORT:" + str(ORACAL_PORT)
 34           + ", ORACAL_SID:" + ORACAL_SID+ ", ORACAL_USERNAME:" + ORACAL_USERNAME )
 35 
 36     conn = cx_Oracle.connect(ORACAL_USERNAME, ORACAL_PASSWORD, dsn)
 37     printLog("Connect to oracle DB success!")
 38 
 39     cursor = conn.cursor()
 40     sql = "select * from " + ORACAL_TABLE_NAME
 41     cursor.execute(sql)
 42 
 43     global data_from_oracle
 44     data_from_oracle = cursor.fetchall()
 45     printLog("Get total " + str(len(data_from_oracle)) + " datas from " + ORACAL_SID + "." + ORACAL_TABLE_NAME)
 46 
 47     conn.close()
 48     printLog("Connect to oracle DB closed.")
 49 
 50 
 51 # 寫入mysql表
 52 def write_to_mysql():
 53     global MYSQL_HOST, MYSQL_PORT, MYSQL_DB_NAME, MYSQL_USERNAME, MYSQL_PASSWORD, \
 54            MYSQL_DB_CHARSET, MYSQL_TABLE_NAME, ORACAL_DB_CHARSET
 55 
 56     printLog("Connect to mysql DB start, MYSQL_HOST:" + MYSQL_HOST + ", MYSQL_PORT:" + str(MYSQL_PORT)
 57           + ", MYSQL_DB_NAME:" + MYSQL_DB_NAME + ", MYSQL_USERNAME:" + MYSQL_USERNAME)
 58     conn = MySQLdb.Connect(host=MYSQL_HOST,
 59                            port=MYSQL_PORT,
 60                            user=MYSQL_USERNAME,
 61                            passwd=MYSQL_PASSWORD,
 62                            db=MYSQL_DB_NAME,
 63                            charset=MYSQL_DB_CHARSET)
 64     printLog("Connect to mysql DB success!")
 65 
 66     cursor = conn.cursor()
 67     sql = 'truncate table ' + MYSQL_TABLE_NAME
 68     cursor.execute(sql)
 69     printLog("Truncate table " + MYSQL_TABLE_NAME + " success!")
 70 
 71     sql = get_insert_sql()
 72     if sql is not None:
 73         cursor.execute(sql)
 74         conn.commit()
 75         effectRow = cursor.rowcount
 76         printLog("Write data to table " + MYSQL_TABLE_NAME + " success! Effect row:" + str(effectRow))
 77     else:
 78         printLog("Total length of oracle data is zero, no insert!")
 79     conn.close()
 80     printLog("Connect to mysql DB closed.")
 81 
 82 
 83 # 獲取插入mysql表的sql語句
 84 def get_insert_sql():
 85     global data_from_oracle,MYSQL_TABLE_NAME 
 86     if len(data_from_oracle) == 0:
 87         return None
 88     sql = "INSERT INTO `" + MYSQL_TABLE_NAME + "` (name, age, sex) VALUES "
 89     for item in data_from_oracle:
 90         sql += "('" + item[0].strip() + "'," + item[1] + ",'" + item[2].strip() "'),"
 91     return sql[:-1]
 92 
 93 
 94 
 95 # 打印日志
 96 def printLog(content):
 97     global LOG_FILE_NAME
 98     f = open(LOG_FILE_NAME, 'a')
 99     time = datetime.datetime.now()
100     timestr = time.strftime('%Y-%m-%d %H:%M:%S.%f')
101     f.write(timestr + ' :')
102     f.write(content + "\n")
103     f.close()
104 
105 
106 # 退出程序
107 def exit_program():
108     printLog("Program exit.\n")
109     exit()
110 
111 
112 # 主程序
113 def main():
114     try:
115         read_from_oracle()
116         write_to_mysql()
117     except Exception as e:
118         printLog("Error occurred!")
119         global ORACAL_DB_CHARSET
120         printLog(str(e).decode(ORACAL_DB_CHARSET).encode('utf-8'))
121         exit_program()
122     exit_program()
123 
124 
125 main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM