佛系程序员
首页
栏目
标签
归档
关于
友链
佛系程序员
首页
栏目
标签
归档
友链
关于
Dvbbs动网先锋论坛老古董的Access数据库导出变成Mysql
Mysql
技术开发
发布日期: 2025-02-01 22:43:53
喜欢量: 1 个
阅读次数:
278
Dvbbs7 是20年前的论坛网站了,
动网先锋论坛老古董的翻新记录日志 看看老古董是什么样子的?论坛源码的官网找不到了,看看我们Dvbbs做的网站: 前台:[http://www.rollor.net.cn](http://www.rollor.net.cn/) Dvbbs7 动网论坛, 有20多年的历史了。2018年一位朋友交给我这些东西。我买了一个香港的windows空间,注册了域名,就一直放到这个空间里,香港的空间也不需要备案,每年续费199元,算200元吧,好记。 时至今日,又有几天要续费了,我想能不能改成PHP+Mysql的网站,这样就不需要另外买这个空间,省一些钱,那最重要的是,要把里面的Access数据库转为Mysql的。 当然第一步,我要把代码,数据库先下下来。下载代码,也是花了许多时间,FTP工具(FileZilla, ),真是慢,空间服务商那边帮忙打包800M,也是下载不了,最后还是靠FTP工具。下载完后,我才想起,自己以前备份过这个数据库,取名:#073012-2018.mdb,实际上是在代码的,/thank目录下。时间太久,不记得,我还是找到自己备份的那一个。 登入后台:http://www.rollor.net.cn/admin_index.asp 也是有一个备份数据的功能,备份好后会生成一个文件,下载还是得用FTP,但那个弄了老半天,文件根本解压不了。还是靠的备份的那一个。 好,数据库有了。接下来就是怎么处理了。 查看到是:Dvbbs7版本,网上一顿搜索,一开始我搜索mac电脑能用得上的,能打开Access的软件,都要收费,还美元的,算了,省一点钱。终于最后找到这一篇文章,看到希望: https://blog.csdn.net/qq_30396367/article/details/128075161 **MS Access To MySQL Tool** 下载页面 https://www.bullzip.com/download.php 也就是这个工具,要在windows上使用,借了windows电脑,一顿操作,很快转成了sql文件,在得到sql文件时,我以为万事大吉,要收工了,然后却遇到新的问题,一个大坑, 打开sql文件后,里面有一些字符是乱码的, 为了处理这个乱码,着实花了半天,4、5个小时,坐在电脑前动都没动, 一开始我是用命令和程序处理,转码,不行。后来又手动+AI处理,太慢了, 第160行报错,手动解决, 下一行又报错,手动解决, 但一共有106432行,手动不了。 看来,千万不要手动解决此类问题。必须要采取其它的方法。 仅仅 Dvbbs1这一个表,就有7万条数据。 不管如何,这个sql文件还是有用的,我手动删除了 DROP, INSERT, 基本上就留下CREATE TABLE,然后把这些表结构先创建起来。因为后面,导入时,需要已经存在的表。 插播一句,前面没找到方法,差点要去买了一个windows服务器,再安装Access软件,费钱又费时。 后来我想,还是要能够编辑Access文件,最后还是万能的淘宝,花了2元,我买到了2010的Access,用百川的电脑,安装上了,然后打开.mdb文件,里面没有乱码,再一个个转为Excel表,后面,再转csv, 才能导入到mysql. 45个表,一个个手动转的。 得到45个excel表之后,我选择Dvbbs1这个先转,用python程序几番测试后,转出的csv能够导入。 这个python代码是:# excel*to\*csv.py** ``` import pandas as pd import os def exceltocsv(excelfile, output_dir=None): # 读取 Excel 文件 xls = pd.ExcelFile(excel_file) # 如果没有指定输出目录,使用 Excel 文件所在目录 if output_dir is None: output_dir = os.path.dirname(excel_file) # 确保输出目录存在 os.makedirs(output_dir, exist_ok=True) # 遍历所有工作表 for sheet_name in xls.sheet_names: df = xls.parse(sheet_name) # 读取工作表 csv_file = os.path.join(output_dir, f“{sheet_name}.csv”) # 输出 CSV 文件名 df.to_csv(csv_file, index=False, encoding=‘utf-8-sig’) # 保存为 CSV,避免编码问题 print(f“Converted: {sheet_name} -> {csv_file}“) # 示例使用 if __name == “__main“: excel_file_path = “Dv_bbs1.xlsx” # 替换为你的 Excel 文件路径 excel_to_csv(excel_file_path) ``` 后面因为你需要批量转:# excel_to_csvs.py ``` import os import pandas as pd def excel_to_csv(excel_file_path, output_dir): “”” 将单个 Excel 文件的所有工作表转换为 CSV 文件,并保存到指定目录。 “”” try: xls = pd.ExcelFile(excel_file_path) base_name = os.path.splitext(os.path.basename(excel_file_path))[0] # 获取文件名(不含后缀) csv_file_name = f“{base_name}.csv” # 生成 CSV 文件名 csv_file_path = os.path.join(output_dir, csv_file_name) # 处理文件名冲突 counter = 1 while os.path.exists(csv_file_path): csv_file_name = f“{base_name}{counter}.csv” # 添加序号 csv_file_path = os.path.join(output_dir, csv_file_name) counter += 1 # 将 Excel 文件的所有工作表合并为一个 DataFrame df_list = [] for sheet_name in xls.sheet_names: df = xls.parse(sheet_name) df_list.append(df) # 将所有工作表合并为一个 CSV 文件 combined_df = pd.concat(df_list, ignore_index=True) combined_df.to_csv(csv_file_path, index=False, encoding=“utf-8-sig”) print(f“已转换:{csv_file_path}“) except Exception as e: print(f“错误:处理文件 {excel_file_path} 时发生异常 - {e}“) def convert_all_excel_to_csv(input_dir): “”” 遍历指定目录下的所有 .xlsx 文件,并将其转换为 CSV 文件。 “”” if not os.path.exists(input_dir): print(f“错误:目录 {input_dir} 不存在”) return # 创建输出目录 output_dir = os.path.join(input_dir, “csv_output”) os.makedirs(output_dir, exist_ok=True) # 遍历目录下的所有 .xlsx 文件 for root, dirs, files in os.walk(input_dir): for file in files: if file.endswith(“.xlsx”): excel_file_path = os.path.join(root, file) print(f“正在处理文件:{excel_file_path}“) excel_to_csv(excel_file_path, output_dir) # 指定输入目录 input_dir = “roller-excel” # 开始转换 convert_all_excel_to_csv(input_dir) ``` 就是把所有的excel表放在 roller-excel 目录 下。然后,他会把处理好的,全部放在csv_output目录下。 得到csv文件后,我需要很多句命令,create_mysql_commands.py ``` import os # 定义 csv 文件所在的目录 csv_directory = ‘csv_output’ # 用于存储生成的命令 commands = [] # 遍历指定目录下的文件 for root, dirs, files in os.walk(csv_directory): for file in files: # 检查文件是否为 .csv 文件且不是隐藏文件 if file.endswith(‘.csv’) and not file.startswith(‘.’): # 构建完整的文件路径 file_path = os.path.join(root, file) # 生成 mysqlimport 命令 command = f“mysqlimport —local -h 127.0.0.1 -u root -p123456 -P 3305 —fields-terminated-by=’,’ —lines-terminated-by=’\n’ —ignore-lines=1 roller {file_path}“ # 将命令添加到列表中 commands.append(command) # 将生成的命令保存到文本文件中 output_file = ‘mysql_commands.txt’ with open(output_file, ‘w’, encoding=‘utf-8’) as f: for command in commands: f.write(command + ‘\n‘) print(f“生成的命令已保存到 {output_file} 文件中。”) ``` 这样就生成了一个.txt 文件 然后,本地用命令,执行即可。 基本上完成了90%,但有些失败了,显示无法自增,然后我修改表结构,先去掉自增。再导入。 需要先去掉自增的有4个表: Dv_Message Dv_bbs1 Dv_User Dv_Topic 然后再导入后,再检查一下,去掉那些id=0 的记录,把自增 加上。 最后我对照了一下,一共45个表。 有了这个Mysql表之后,如果用PHP把论坛重做也是可以的。显示的搜索贴子等。不过工程也是非常大。 这个网站太老了,活跃时间在2004年。到2018年我发了最后一条贴子。估计没有人来看。 但是朋友原希望放在网上,作为一个记忆。 接下来我打算换个便宜的套餐空间,可以的话,也不用去重构了,就一直放在他们的Windows空间吧。毕竟,重写代码,工作量非常之大。 整整花了两天。我的宝贵时间。 2.4 补记 在迁移到新空间时,我先上传的代码不全,导入报错:‘数据库连接出错,请检查连接字串。’ ,我以为是空间的配置不一样。然后根据AI提示,又写了test.asp,都没有办法,后来,又去找另一家空间商,测试66.zip老代码,可以打开,然后,替换 数据库.asp文件后,就又报这个错。 才知,并不能够这样替换。 于是,我在原空间,重新用他们的线上压缩打包,FTP下载,再上传到他们的新空间,这一次,就成功了。 电脑上用不了,只能是ipad上解压。 以后,还是要定期进行线上打包备份,下载来。 目前,此网站正常运行了。此事告一段落。 对了,现在我用的是淘宝店铺:“九零起航”的空间,香港的套餐3,29/元一年。
文章作者:
yyii
文章链接:
http://www.amtb.info/show/MTI4
版权声明:
本博客所有文章除特別声明外,转载请注明来源
佛系程序员
!
分享:
搜索