日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

python和sqlserver_利用python实现mysql数据库向sqlserver的同步

發布時間:2024/9/3 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python和sqlserver_利用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 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 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

)

總結

以上是生活随笔為你收集整理的python和sqlserver_利用python实现mysql数据库向sqlserver的同步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。