本片文章分为两个部分,此部分为上半部分,这次主要是把access数据转到mysql数据库,接下来看代码。
import pyodbc
import pymysql
#写的一个类 password需要输入自己MySQL的密码
class mysql(object):
def __init__(self, host='localhost', user='root', port=3306, charset='utf8', passwd='xxx'):
self.host = host
self.user = user
self.port = port
self.charset = charset
self.passwd = passwd
def create_database(self, dbname): # 库的创建传入库名
conn = pymysql.connect(
host=self.host,
user=self.user,
passwd=self.passwd,
port=self.port,
charset=self.charset
)
# 获取游标
cursor = conn.cursor()
sql = f'create database if not exists {dbname} default character set utf8'
cursor.execute(sql) # 提及语句
conn.commit() # 提及更改
# 关闭
cursor.close()
conn.close()
def create_T(self, dbname, sql_table): # 表的创建传入库名和,建表语句
conn = pymysql.connect(
host=self.host,
user=self.user,
passwd=self.passwd,
port=self.port,
charset=self.charset,
db=dbname
)
# 获取游标
cursor = conn.cursor()
cursor.execute(sql_table)
conn.commit() # 提及更改
# 关闭
cursor.close()
conn.close()
if __name__ == '__main__':
base = mysql()#创建对象
base.create_database('work2009')#建立一个叫work2009的数库
#创建access数库连接
DBfile = r"C:/Users/22248/Desktop/原始数据库/AdventureWorks2008.mdb" # 数据库文件
conn = pyodbc.connect(r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + DBfile + ";Uid=;Pwd=;")
cursor = conn.cursor()
#准备3个列表容器
tables = [] #表名容器
fields = [] #字段容器
field_str = [] #字段封装成sql语句容器
#获取所以表名
for table_info in cursor.tables(tableType='TABLE'):
tables.append(table_info.table_name)
#遍历所有表
for table in tables:
for row in cursor.columns(table):
fields.append(row.column_name)#row.column_name得到表的字段
for field_r in fields: # 将一个表的字段封装成字符串
s = f'{field_r} char(120)' #做成sql语句形式
field_str.append(s)
fields.clear() #清理字段容器,准备装下一个表的字段
m = ','.join(field_str)
base.create_T('work2009', f'create table {table}({m})') #在work2009建立表,这是sql,语句f'create table {table}({m})'
field_str.clear() #清理字段sql语句容器,准备装下一个表
连接access数据库出现如下错误
pyodbc.InterfaceError: (‘IM002’, ‘[IM002] [Microsoft][ODBC 驱动程序管理器] 未发
现数据源名称并且未指定默认驱动程序 (0) (SQLDriverConnect)’)
例如上面这样的提示就需要安装64位的ODBC 驱动器:
下载地址:https://www.jb51.net/softs/695978.html



