下面是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