開發筆記1 2012-5-3 周四
python開發一個數據同步程序,把各地市系統里的部分數據表變化,同步到省局中心數據庫去,便于全省統計分析。
可以c++, java, python, perl來實現,最后選擇python,數據庫訪問庫自然采用MySQLdb, 我要快速實現。
功能夠簡單,synccli.py---->syncsrv.py.
出現兩個問題需要記錄下:
1) MySQLdb內存泄漏問題:
MySQLdb.connect(host=db_host, port=db_port, user=db_user, passwd=db_pwd, db=db_name)
----沒問題
MySQLdb.connect(host=db_host, port=db_port, user=db_user, passwd=db_pwd, db=db_name, charset=db_charset)
----指定一個編碼charset, 內存泄漏非常嚴重,一個壓力測試下去,1G內存很快玩完。
MySQLdb.connect(host=db_host, port=db_port, user=db_user, passwd=db_pwd, db=db_name, charset=db_charset, use_unicode=False)
----指定一個編碼charset, 同時use_unicode=False,又沒有問題了。
搞不清楚怎么這個bug沒有解決,也沒時間去看MySQLdb源代碼,它也不過調用mysql的c庫,c庫是沒這個問題的,可能在編碼轉換時沒處理好。
所以如果要指定編碼時,如我們常常要gbk或utf,那就一起用use_unicode=False。
2) MySQLdb查詢更新緩存問題:
這個問題今天困擾了我小半天,我在navicat上對某字段進行update, python代碼里竟然沒有變化,以前沒有出現這個現象的,總查自己代碼那里搞錯了。
后來網上查查,也有人碰到,說是要調用commit()。
原來是這次mysql建立數據庫時,用的是InnoDB,以前都是用MyISAM,我都不喜歡用InnoDB,合作方用到InnoDB,沒辦法,代碼里也沒有真用到事務。
MySQLdb行為還真是的,查詢也要調用commit(), 非常思維啊。
代碼是加上conn.commit()之后就問題解決了,不知道有什么后遺癥沒有,不管了,等測試組去長久觀察。