import mysql
print('=================================\033[0:32m数据库dm到mysql之间全部表同步脚本开始执行\033[m====================================================')
import jaydebeapi
import time
from datetime import date,datetime
with open('D:\work\insertLog.txt', 'a') as file:
print(('=================================\033[0:32m数据库dm到mysql之间全部表同步脚本开始执行\033[m===================================================='),file=file)
start_time = time.time() # 记录开始时间
source_mode='Q_NSQRLZYHSHBZJ'
target_end_mode='sjgx'
url = f'jdbc:dm://ip:5236/{source_mode}'
user = 'username'
password = password'
dirver = 'dm.jdbc.driver.DmDriver'
jarFile = ['D:\software\dbeaver\JAVA_Mybatis\lib\DmJdbcDriver18.jar','D:\software\dbeaver\JAVA_Mybatis\lib\mysql-connector-j-8.3.0.jar']
urls = f'jdbc:mysql://ip:25337/{target_end_mode}?user=your_username&password=your_password&useSSL=false&serverTimezone=UTC'
users = 'username'
passwords = 'password'
dirvers='com.mysql.cj.jdbc.Driver'
dm_conn =jaydebeapi.connect(dirver, url, [user, password], jarFile)
dm_cursor = dm_conn.cursor()
mysql_conn=jaydebeapi.connect(dirvers, urls, [users, passwords], jarFile)
mysql_source_cursor=mysql_conn.cursor()
#获取mysql库表最大时间值
try:
mysql_source_cursor.execute('select max(S_LAST_UPDATED) FROM ex_339_smzgrkqxx')
tables = mysql_source_cursor.fetchall()
#print(tables[0][0])
if tables[0][0] is not None:
sql_dm=f'''select * from Q_NSQRLZYHSHBZJ.EX_339_SMZGRKQXX WHERE S_LAST_UPDATED >'{tables[0][0]}' '''
dm_cursor.execute(sql_dm)
result=dm_cursor.fetchall()
#print('0000000000000000')
#print(len(result))
for i in result:
#print(i)
#print(len(i))
insert_sql_mysql='insert into ex_339_smzgrkqxx(S_GUID ,S_CREATION_TIME ,S_LAST_UPDATED ,S_STATUS ,S_TRANS_STATUS ,S_ROUTE_STATUS ,S_SRC_NODE ,S_DEST_NODE ,S_BATCH_NO ,ID ,CODE,NAME,AREA_NAME ,JSQY_NAME,COMPETENT_DEPARTMENT,ENTERPRISE_NAME,TEAM_NAME,WORKER_NAME,CARD_NUM,TYPE,WORK_DATE ,WORK_START,WORK_END ,WORK_HOURS,UPLOAD_DATE,data_src ,dt ) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
mysql_source_cursor.execute(insert_sql_mysql,i)
#logger.info(f'当前日期:{date.today()},插入数据:{len(result)}条,更新日期:{tables[0][0]}')
# with open('D:\work\insertLog.txt', 'a') as file:
# print(f'当前日期:{date.today()},插入数据:{len(result)}条,更新日期:{tables[0][0]}',file=file)
else:
sql_dm_full = f'select * from Q_NSQRLZYHSHBZJ.EX_339_SMZGRKQXX'
dm_cursor.execute(sql_dm_full)
result_full = dm_cursor.fetchall()
print(len(result_full))
insert_sql_mysql_full='insert into ex_jianwei_339_smzgrkqxx(S_GUID ,S_CREATION_TIME ,S_LAST_UPDATED ,S_STATUS ,S_TRANS_STATUS ,S_ROUTE_STATUS ,S_SRC_NODE ,S_DEST_NODE ,S_BATCH_NO ,ID ,CODE,NAME,AREA_NAME ,JSQY_NAME,COMPETENT_DEPARTMENT,ENTERPRISE_NAME,TEAM_NAME,WORKER_NAME,CARD_NUM,TYPE,WORK_DATE ,WORK_START,WORK_END ,WORK_HOURS,UPLOAD_DATE,data_src ,dt ) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
mysql_source_cursor.executemany(insert_sql_mysql_full, result_full)
#mysql_conn.commit()
except Exception as err:
print("Error: {}".format(err))
finally:
mysql_source_cursor.close()
mysql_conn.close()
end_time = time.time() # 记录结束时间
execution_time = end_time - start_time # 计算执行时长
today = date.today()
now = datetime.now()
# 分别提取年、月、日、小时、分钟和秒
current_year = now.year
current_month = now.month
current_day = now.day
current_hour = now.hour
current_minute = now.minute
current_second = now.second
def convert_seconds(seconds):
days = seconds // (24 * 3600)
seconds %= (24 * 3600)
hours = seconds // 3600
seconds %= 3600
minutes = seconds // 60
seconds %= 60
return f"{days}天 {hours}小时 {minutes}分钟 {seconds}秒"
with open('D:\work\insertLog.txt', 'a') as file:
print(f"当前日期:{today},脚本执行时长:{convert_seconds(int(execution_time))},上次增量更新截止时间:{tables[0][0]},本次总共增量插入{len(result)}条数据",file=file)
print(f'=================================脚本执行结束,当前时间为: {current_year}-{current_month:02d}-{current_day:02d} {current_hour:02d}:{current_minute:02d}:{current_second:02d}====================================================',file=file)
#print(f"当前时间为: {current_year}-{current_month:02d}-{current_day:02d} {current_hour:02d}:{current_minute:02d}:{current_second:02d}",file=file)
#print(f"当前日期:{today},脚本执行时长:{convert_seconds(int(execution_time))},上次增量更新截止时间:{tables[0][0]},本次总共增量插入{len(result)}条数据")
达梦增量推送数据到mysql(增量)
于 2024-09-29 11:38:07 首次发布