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

下面是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( )
 
转自:https://blog.csdn.net/oldjwu/article/details/2277496

猜你喜欢

转载自www.cnblogs.com/veetai/p/9151627.html