提问人:Madara's Ghost 提问时间:8/9/2011 更新时间:12/5/2013 访问量:2185
MS Access to MySQL 转换帮助(巨大的表)
MS Access to MySQL Conversion help (Gigantic table)
问:
所以我有这个巨大的表,包含大约700万条记录,在MS Access(*.mdb)中,我想将其转换为更可行的MySQL格式,并将其存储在我的Web服务器上。文件本身重量为 2GB。
问题是,由于表太大,它不允许我正常导出它(Access 说限制是 65,536 条记录。
我尝试了一些第三方软件,但无济于事。
任何人都可以推荐一种干净的方法,而不会损坏内部数据吗?
提前感谢您的任何帮助。
答:
是紧凑+维修后的700万价值吗?我的意思是,如果每条记录的长度约为 120 个字符,则可以在 2 次演出中容纳 3200 万条记录。
此外,我不知道导出 65,000 条记录的限制,但仅限于 Excel。
因此,您可以/应该能够将数据导出为 csv,然后在 mySql 中使用批量文本导入来提取该数据。因此,请尝试将表格导出为 csv。这应该有效。
我的意思是,如果您与 sql 服务器有良好的本地连接,您可以通过 odbc 链接表,但如果没有,那么我会导出到 csv(它非常快)。然后我会压缩文件(他们压缩得很棒)。将文件上传到服务器,解压缩,然后使用批量文本导入。因此,这样的压缩文件非常小,可以节省大量的传输时间。
您也可以考虑使用制表符分隔,因为 mySql 也可以导入这些,但一个简单的文本文件应该可以正常工作。
评论
我会使用 pyodbc,如
http://en.wikibooks.org/wiki/Python_Programming/Database_Programming
从 http://python.org/ 下载 Python 2.7 下载 http://code.google.com/p/pyodbc/
修改以下 coede 以根据您的表和文件设置 myfile.mdb 和 MyTable
将代码保存在文件 translate.py
import csv
mycsv = csv.writer(open('result.csv', 'wb'), delimiter=',',
quotechar='"', quoting=csv.QUOTE_MINIMAL)
import pyodbc
DBfile = 'myfile.mdb'
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+DBfile)
cursor = conn.cursor()
SQL = 'SELECT * FROM MyTable;'
for row in cursor.execute(SQL): # cursors are iterable
mycsv.writerow(row)
cursor.close()
conn.close()
跑python translate.py
评论
如果还没有 MySQL 的 ODBC 驱动程序,请安装一个。最新版本可在此处获得:下载 Connector/ODBC
从 Windows ODBC 数据源管理器为 MySQL 服务器创建 DSN(数据源名称)。
然后,在 Access 2003 中,在“数据库”窗口中选择表,然后选择“文件”->从 Access 导出“主菜单。在“将表'yourtablename'导出到...”对话框中,从“保存类型”下拉列表(位于对话框底部)中选择“ODBC Databases()”。下一个对话框允许您指定MySQL将用于导出表的名称,并且默认为Access表名称。单击“确定”后,您将看到另一个对话框“选择数据源”,您可以在其中选择 DSN for MySQL。在该对话框中单击“确定”后,您可能会再次收到一个要求您输入用户名和密码的对话框。提供它们,然后单击“确定”。
希望您的表能够正确传输。但是,我从未使用MySQL进行过该操作。它对我适用于将 ODBC 传输到 SQL Server 和 PostGreSQL。所以我不明白为什么它也不适用于MySQL。
此外,我从未尝试过一次性导出 700 万条唱片。如果它窒息,我们将不得不想出一个解决方法。
如果您使用的是 Access 2007 而不是 2003,请从功能区的“导出”部分开始查找类似的选项。
我之所以建议采用这种方法,是因为在我的印象中,这种导出将是一次性的,因此我认为 Access UI 导出方法最简单。但是,您可以使用 DoCmd.TransferDatabase 方法和 ODBC DSN 对 VBA 代码执行基本相同的操作。
另一种选择是在MySQL中创建兼容的表结构,在Access中创建指向MySQL目标表的链接(再次使用DSN),然后从Access运行“追加查询”:
INSERT INTO link_to_mysql_table (field1, field2, field3, etc)
SELECT field1, field2, field3, etc
FROM access_table;
追加查询方法在导出阻塞 700 万条记录时可能很有用。您可以添加一个 WHERE 子句,将 SELECT 查询的输出记录集限制为可管理的区块大小,然后使用不同的 WHERE 重复以指定另一个区块。
评论
在您自己的系统上安装MySQL并对其进行扩展,而不是尝试使用本地服务器。然后运行从 MySQL 到服务器实例的追加查询。
评论