H**Online Syn**avigator倒閉了,王八蛋老闆XX沉迷於吃雞,還有2000+的BUG沒有修復,就帶著他的小姨子跑路了,我們碼農沒辦法,只能用python來自己開發一個數據同步程式應急。什麼詭異的第三方庫都不要,統統可以 pip,只要你用python 3。x,就可以很快搞出這個同步程式。

罵完,開工!

開發機環境:

python 3。6。x

windows 10

生產環境:

CentOS 7。2

python 3。6。x

選擇 python 3。x 的理由:

1。 Python 2。x 將於2020年完成歷史使命

2。 Python 3。x 採用的是 unicode 編碼,亂碼問題不存在的!

原理

原理簡單到令人髮指:

從源資料庫中讀取資料

寫入到目標資料庫

沒了。

需要注意的坑:

字元編碼問題,弄不好中文就出亂碼了。

字元長度問題。

開工前的配置:

pip install pymysql

pip install pymssql

pip install ConfigParser

在 python 3。x 中,ConfigParser被改名為configparser,參考:

程式碼實現

假設你有個資料庫在mysql上,有個資料庫在sql server上。你需要同步 users 表的資料(兩個資料庫的users表的資料結構完全相同),可以這樣:

資料庫配置檔案

作為一個有經驗的開發者,是一定不會把資料庫的配置放到每個程式原始碼中的。這裡我們建立了一個叫做 database。config 的配置檔案來保持資料庫的配置:

[DATABASE_CONFIG_A]

database=database_name

host=database_host_ip_address

user=database_user_login_id

password=database_user_password

[DATABASE_CONFIG_B]

database=database_name

host=database_host_ip_address

user=database_user_login_id

password=database_user_password

以上的引數,請大家自己按照自己的實際情況配置成自己的引數。

2. 資料遷移程式

import

pymssql

import

pymysql

import

configparser

def

getDbConfig

filename

section

):

config_parser

=

configparser

ConfigParser

()

config_parser

read

filename

database

=

config_parser

get

section

‘database’

host

=

config_parser

get

section

‘host’

user

=

config_parser

get

section

‘user’

password

=

config_parser

get

section

‘password’

config

=

{

‘database’

database

‘host’

host

‘user’

user

‘password’

password

}

return

config

def

insertData

rs

):

config

=

getDbConfig

‘database。config’

‘DB_SQLSERVER’

conn

=

pymssql

connect

host

=

config

get

‘host’

),

user

=

config

get

‘user’

),

password

=

config

get

‘password’

),

database

=

config

get

‘database’

),

charset

=

‘utf8’

cursor

=

conn

cursor

()

for

row

in

rs

sql

=

‘INSERT INTO users (name, lastupdated_at) VALUES(

%s

%s

)’

cursor

execute

sql

row

0

],

row

1

]))

# 如果不同,可以在這裡做小的處理

conn

commit

()

conn

close

()

mysqlConfig

=

getDbConfig

‘database。config’

‘DB_MYSQL’

mysqlConn

=

pymysql

connect

host

=

mysqlConfig

get

‘host’

),

user

=

mysqlConfig

get

‘user’

),

password

=

mysqlConfig

get

‘password’

),

database

=

mysqlConfig

get

‘database’

),

charset

=

‘utf8’

#檢視連線是否成功

mysqlCursor

=

mysqlConn

cursor

()

sql

=

‘SELECT name, lastupdated_at FROM users’

mysqlCursor

execute

sql

#用一個rs變數獲取資料

rs

=

mysqlCursor

fetchall

()

mysqlCursor

close

()

insertData

rs

這樣,一個從 mysql 讀取資料,並寫入 Sql Server 的資料傳輸程式就完成了。

有待完善的地方

這個程式並不完美,比如我並沒有考慮加入異常捕捉機制和日誌機制。

如果要自動,定時的傳輸,可以利用windows的計劃任務或者CentOS(Linux)的 cron 來實現。這個可以自己百度了。

從上面的例子可以看出,python確實在某些應用上非常強大,簡直是神器。

參考資料

pymssql官網

python的ConfigParser模組