下面是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()
本文介绍了一种将Access数据库中的数据迁移到MySQL的方法。通过Python脚本实现数据的读取和写入,确保数据准确迁移。涉及的技术包括Python、win32com、MySQLdb等。
850

被折叠的 条评论
为什么被折叠?



