使用Python将数据从Access导入到MySQL

    技术2022-05-11  28

    下面是Python源代码,当然,这只是我的一个示例,读者在实际应用中可能还需要根据实际情况作一些更改。

    #  -*- 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)  ==   17   and  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()    

    最新回复(0)