# -*- coding: utf-8 -*- import win32com.client as wc, MySQLdb as mysql import types, sys, re, time def getAccessData(sqlstr): global adoConn, adoRs, fieldNames adoRs.Open(sqlstr, adoConn, 1, 3) adoRs.MoveFirst() d = [] fieldNames = [] for i in range(adoRs.RecordCount): d2 = [] for j in range(len(adoRs.Fields)): d2.append(adoRs.Fields[j].Value) if i == 0: fieldNames.append(adoRs.Fields[j].Name) d.append(d2) adoRs.MoveNext() adoRs.Close() return d def addToMySQL(tb, lst, d): global mcur, mdb print"current table:", tb f = open("cmd.sql", "w+") mcur.execute("truncate table `"+ tb +"`;") mcur.execute("set names utf8;") for i in range(len(d)): sqlstr ="insert into "+ tb +" ("+ joinList(lst) +") values ("+ joinList2(d[i]) +")" #print sqlstr sqlstr = sqlstr.encode("utf-8") #print type(sqlstr) #print sqlstr f.write(sqlstr +"; ") mcur.execute(sqlstr) mdb.commit() f.close() print"table %s copied!"% tb def joinList(l): s ="" for i in range(len(l)): s +=","+ str(l[i]) return s[1:] def joinList2(l): s ="" t ="" #print l for i in l: #print i, type(i) if type(i) == types.UnicodeType: s +=",'"+ i.replace("'", "/'") +"'" else: if type(i) != types.IntType: s +=",'"+ chkDateTime(str(i)) +"'" else: s +=","+ str(i) return s[1:] def chkDateTime(s): if len(s) ==17and len(s.partition("/")[0]) ==2: s = time.strptime(s, "%m/%d/%y %H:%M:%S") s = time.strftime("%Y-%m-%d %H:%M:%S", s) return s if__name__=="__main__": print"copy data from access to mysql" tbs = ["admin", "ansmark", "collection", "difficulty", "log_login", "read_history", "recommend", "user"] tbs += ["answer", "guestbook", "message", "qu", "tag", "friend"] #tbs = ["friend"] #connect to access adoSource ="E:Studio estdb.mdb" adoConnStr ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ adoSource adoConn = wc.Dispatch("ADODB.Connection") adoConn.Open(adoConnStr) adoRs = wc.Dispatch("ADODB.RecordSet") #connect to mysql mdb = mysql.connect(host ="localhost", user ="root", passwd ="123456", db ="db") mcur = mdb.cursor() for tb in tbs: sqlstr ="SELECT * FROM ["+ tb +"];" fieldNames = [] d = getAccessData(sqlstr) addToMySQL(tb, fieldNames, d) adoConn.Close() mcur.close() mdb.close()