利用python實現mysql資料庫向sqlserver的同步
話不多說,直接上程式碼。
#!/usr/bin/python # -*- coding:utf8 -*- # author: chenzhixin """ 一、安裝環境: python3 pip install pymysql pip install pymssql 二、實現功能: 將mysql的oa_2016.formmain_5027(手機打卡記錄)資料,增量同步到sqlserver資料庫的kaoqin.CHECKINOUT中 三、執行方法: a)定時任務 [root@oadb1 shell]# crontab -l * * * * * python -W ignore /usr/local/shell/sync_mobile_kaoqin.py >> /var/log/sync_mobile_kaoqin.log 2>&1 b) 日誌位置 tail -f /var/log/sync_mobile_kaoqin.log 四、測試sql: mysql執行 select * from oa_2016.formmain_5027 sqlserver上執行 select * from CHECKINOUT where sn='手機端打卡' """ from contextlib import contextmanager import pymysql as mysqldb import pymssql as mssqldb import time @contextmanager def get_mysql_conn(**kwargs): """ 建立MySQL資料庫連線 :param kwargs: :return: """ conn = mysqldb.connect(host=kwargs.get('host', 'localhost'), user=kwargs.get('user'), password=kwargs.get('password'), port=kwargs.get('port', 3306), database=kwargs.get('database') ) try: yield conn finally: if conn: conn.close() @contextmanager def get_mssql_conn(**kwargs): """ 建立sqlserver資料庫連線 :param kwargs: :return: """ conn = mssqldb.connect(server=kwargs.get('host'), user=kwargs.get('user'), password=kwargs.get('password'), database=kwargs.get('database') ) try: yield conn finally: if conn: conn.close def execute_mysql_select_sql(conn, sql): """ 執行mysql的select型別語句 :param conn: :param sql: :return: """ with conn.cursor() as cur: cur.execute(sql) rows = cur.fetchall() return rows def execute_mysql_sql(conn, sql): """ 執行mysql的dml和ddl語句,不包括select語句 :param conn: :param sql: :return: """ with conn.cursor() as cur: cur.execute(sql) def execute_mssql_sql(conn, sql): """ 執行sqlserver的dml和ddl語句,不包含select語句 :param conn: :param sql: :return: """ with conn.cursor() as cur: cur.execute(sql) conn.commit() def get_mysql_kaoqin_data(conn): """ 獲取mysql的考勤資料 :param conn: :return: """ sql = "select * from formmain_5027 where field0008 is null or field0008=''" mysql_kaoqin_data_rows = execute_mysql_select_sql(conn, sql) return mysql_kaoqin_data_rows def mysql_sync_to_sqlserver(mysql_conn, mssql_conn, data): """ 把mysql的考勤資料同步到sqlserver資料庫裡面 :param mysql_conn: :param mssql_conn: :param data: :return: """ for index, row in enumerate(data, 1): ID=row[0] state=row[1] start_member_id=row[2] start_date=row[3] approve_member_id=row[4] approve_date=row[5] finishedflag=row[6] ratifyflag=row[7] ratify_member_id=row[8] ratify_date=row[9] sort=row[10] modify_member_id=row[11] modify_date=row[12] field0001=row[13] field0002=row[14] field0003=row[15] field0004=row[16] field0005=row[17] field0006=row[18] field0007=row[19] field0008=row[20] field0009=row[21] #向sqlserver插入資料 insert_data = """ INSERT INTO [kaoqin].[dbo].[CHECKINOUT] ([USERID] ,[CHECKTIME] ,[CHECKTYPE] ,[VERIFYCODE] ,[SENSORID] ,[Memoinfo] ,[WorkCode] ,[sn] ,[UserExtFmt] ,[Synced]) VALUES ((select userid from USERINFO where BADGENUMBER='{userid}'), '{CHECKTIME}', 'I', 1, 1, NULL, 0, '手機端打卡', 0, null )""".format(userid=field0002, CHECKTIME=start_date) execute_mssql_sql(mssql_conn, insert_data) print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) print('###############第{}條手機打卡記錄###############\n'.format(index), insert_data) marked_sql = "update formmain_5027 set field0008='synced' where id={}".format(ID) execute_mysql_sql(mysql_conn, marked_sql) def main(): mysql_conn_args = dict(user='root', host='127.0.0.1', password='*******', database='oa_2016') mssql_conn_args = dict(host='172.x.x.x', user='sa', password='********', database='kaoqin') with get_mysql_conn(**mysql_conn_args) as mysql_conn: mysql_data = get_mysql_kaoqin_data(mysql_conn) with get_mssql_conn(**mssql_conn_args) as mssql_conn: mysql_sync_to_sqlserver(mysql_conn, mssql_conn, mysql_data) if __name__ == '__main__': main()
定時任務:
[root@oadb1 shell]# crontab -l #定時同步手機考勤給sqlserver * * * * * python -W ignore /usr/local/shell/sync_mobile_kaoqin.py >> /var/log/sync_mobile_kaoqin.log 2>&1
日誌:
[root@oadb1 shell]# tail -100f /var/log/sync_mobile_kaoqin.log 2019-10-20 09:04:01 ###############第1條手機打卡記錄############### INSERT INTO [kaoqin].[dbo].[CHECKINOUT] ([USERID] ,[CHECKTIME] ,[CHECKTYPE] ,[VERIFYCODE] ,[SENSORID] ,[Memoinfo] ,[WorkCode] ,[sn] ,[UserExtFmt] ,[Synced]) VALUES ((select userid from USERINFO where BADGENUMBER='1234'), '2019-10-19 14:50:25', 'I', 1, 1, NULL, 0, '手機端打卡', 0, null )
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2660737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql到sqlserver資料庫實時同步工具syncnavigator註冊使用MySqlServer資料庫
- 使用EF 連線 資料庫 SQLserver、MySql 實現 CodeFirst資料庫ServerMySql
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- linux下mysql主從複製,實現資料庫同步LinuxMySql資料庫
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer
- 教你如何運用python實現不同資料庫間資料同步功能Python資料庫
- flnkcdc+datastream實現mysql到mysql資料同步ASTMySql
- Excel檔案 利用MySQL/Python 實現自動處理資料的功能ExcelMySqlPython
- Holer實現外網訪問SQLServer資料庫SQLServer資料庫
- 如何高效實現 MySQL 與 elasticsearch 的資料同步MySqlElasticsearch
- 直播帶貨系統原始碼,實現MYSQL資料庫的主從同步原始碼MySql資料庫主從同步
- Python 利用pymysql和openpyxl操作MySQL資料庫並插入Excel資料PythonMySql資料庫Excel
- [資料庫]MYSQL主從同步資料庫MySql主從同步
- 實現MySQL資料庫的實時備份MySql資料庫
- 阿里 Canal 實時同步 MySQL 增量資料至 ClickHouse 資料庫阿里MySql資料庫
- 【JDBC的實現步驟……MySQL資料庫】JDBCMySql資料庫
- mysql,sqlserver資料庫單表資料過大的處理方式MySqlServer資料庫
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- mysql和redis實時同步資料怎麼實現MySqlRedis
- 技術乾貨|如何利用 ChunJun 實現資料實時同步?
- Python 利用pandas和mysql-connector獲取Excel資料寫入到MySQL資料庫PythonMySqlExcel資料庫
- 資料傳輸 | 利用 DTLE 將 MySQL 資料同步到 DBLEMySql
- ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步資料庫
- k8s部署canal-1.1.6版本實現MySQL資料庫資料同步K8SMySql資料庫
- Linux利用UDF庫實現Mysql提權LinuxMySql
- 部署otter實現mysql主備資料同步(上)MySql
- 部署otter實現mysql主備資料同步(下)MySql
- Python操作SQLServer資料庫增刪改查PythonSQLServer資料庫
- 『現學現忘』Docker基礎 — 31、實現MySQL同步資料DockerMySql
- Mysql資料實時同步實踐MySql
- golang實現mysql資料庫備份GolangMySql資料庫
- SQLSERVER 資料庫效能的基本SQLServer資料庫
- 技術乾貨|如何利用 ChunJun 實現資料離線同步?
- 利用內網穿透 實現外網訪問內網 MySQL等資料庫教程內網穿透MySql資料庫
- MySQL資料庫事務隔離性的實現MySql資料庫
- mybatis實現MySQL資料庫的增刪改查MyBatisMySql資料庫
- mysql資料庫實現主從複製MySql資料庫
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql