Skip to content

借助Windsurf的AI编程能力实现远程MySQL数据库文章导出为本地的Markdown文件

引言

在数字内容迁移和备份的过程中,我们经常需要将存储在数据库中的文章内容导出为更通用的格式,如Markdown。传统方法通常需要编写复杂的脚本,处理各种编码问题,尤其是涉及中文内容时更加棘手。本文将详细介绍如何利用Windsurf的AI辅助编程功能,轻松实现从远程服务器上的MySQL数据库中导出文章内容,并以Markdown格式保存到本地指定文件夹的完整解决方案。

Windsurf简介及其AI编程优势

Windsurf是一款革命性的AI辅助编程工具,它集成了强大的代码生成、问题诊断和解决方案推荐功能。与传统IDE不同,Windsurf能够:

  1. 理解自然语言需求:用户只需描述他们想要实现的功能,Windsurf就能理解并转化为可执行代码
  2. 自动生成完整代码:根据用户需求自动生成符合最佳实践的完整代码
  3. 智能问题诊断:自动识别代码中的问题并提供解决方案
  4. 交互式编程体验:通过对话方式与用户交互,不断优化解决方案
  5. 跨语言和框架支持:支持多种编程语言和框架,适应各种开发需求

在本项目中,Windsurf的AI能力帮助我们快速解决了复杂的编码问题,特别是中文字符编码这一棘手的挑战。

项目背景与需求分析

项目背景

我们面临的情况是:一个基于Ghost博客系统的网站(版本0.7.4)已经无法正常启动(太老旧了),但其中的文章内容仍然保存在MySQL数据库中。我们需要将这些宝贵的内容导出并保存为Markdown文件,以便未来可以迁移到其他平台或进行备份。

需求分析

通过与Windsurf的交互,我们明确了以下具体需求:

  • 从远程服务器上的MySQL数据库中导出所有文章
  • 每篇文章保存为单独的Markdown文件,文件名以文章ID命名
  • 确保中文内容能够正确显示,不出现乱码问题
  • 创建一个索引页面,方便浏览所有文章
  • 所有导出的文章文件需保存到本地文件系统

Windsurf辅助开发过程

1. 设定项目背景及需求到readme.md当中

这点非常重要,用于给windsurf在自动执行的过程中随时理解目标需求,避免出现偏离,这决定着是否能达成目标的关键。

以下是我的readme.md的内容:

1. SSH服务器配置文件在`~/.ssh/config`里的myaliyun,连线只需执行`ssh myaliyun`即可;
2. 在myaliyun上安装有MySQL服务,MySQL的账号是root,密码是wilsonlee
3. 在myaliyun上的MySQL服务内有一个名称为ghost_db的数据库,该数据库是博客系统Ghost的数据库。
4. ghost_db数据库所对应的Ghost是0.7.4版本,比较老旧,现在Ghost已经启动不起来,需要将ghost_db里的文章数据导出来保存到本项目的my-blog文件夹中,导出及保存的规则为:
- 所有从数据库里导出的文章都需要保存为markdown格式文件
- 数据库里的每篇文章数据都要保存为单独的文件,文件名以文章的id命名,文件名后缀为.md

2. 执行过程

在Cascade对话框发送提示词开始执行任务 注意:这里我用的是Cloude 3.7 Sonnet模型,使用的是write模式。 我的提示词如下:

我想你帮我ssh连myaliyun服务器,并从服务器上的数据库将文章导出来,具体请看 @readme.md 。注意,我需要你帮我执行具体的操作,而不仅仅是提供建议

上面的@readme.md是readme.md文件的引用,windsurf会自动读取该文件并在推理过程中引入该文件内容。

接下来就看windsurf自动执行了:

alt text

Windsurf会读取readme.md文件做分析,不仅理解了任务,还主动将其分解为可管理的步骤。

读取readme文件分析后,会先检查是否存在my-blog文件夹,然后自动ssh连线服务器:

alt text

发现连线成功后一直是running,太久了,于是手动输入提示请他继续:

alt text

这次她思考后重新ssh连服务器并发送了mysql连线指令,然后根据结果不断地反思调整:

alt text

然后自己找到了数据库里的文章表,读取表结构:

alt text

自己根据表结构内容找到文章内容的相关字段:

alt text

然后自己统计查找数据并准备开始导出:

alt text

接下来就是不断地自己写代码并自动执行:

alt text

发现导出失败后会自己反思并修改重试:

alt text

重试可以导出文件,但还是会导出结果进行检查:

alt text

检查发现有中文乱码问题:

alt text

自己尝试修复乱码问题,发现还是失败:

alt text

不断地根据每次的结果调整重试,但始终不偏离需求目的:

alt text

当它回复中断时,我只需告诉它继续执行任务,它会继续任务,会采用新的方案继续解决问题:

alt text

多次尝试解决中文乱码不成功,我给他一些新的方案提示:

alt text

新的方案看起来还不行,它自己又思考其他方案:

alt text

多次尝试后,最后他自己想到使用python的ftfy库来解决编码问题:

alt text

终于成功:

alt text

最后还会对任务进行总结:

alt text

至此,整个任务完成。而且我发现原来数据库保存的文章内容里有一些html格式的标签,它都绑我自动将格式转换为markdown,例如这篇:

alt text

重要的是:从头到尾我没写过任何一行代码,我要做的只是告诉它需求、输入几次提示词,它就帮我完成了任务。

Windsurf的AI优势展示

1. 问题诊断与解决

当我们遇到中文编码问题时,Windsurf展示了其强大的问题诊断能力:

用户: 导出的文件中中文显示为乱码,如何解决?

  
Windsurf: 我发现这是一个编码问题。从数据库导出的中文内容在传输过程中可能发生了编码转换。

让我分析一下可能的原因:

1. MySQL数据库使用的字符集可能是utf8mb4
2. 在SSH传输过程中可能发生了编码转换
3. 本地文件系统使用的编码可能与数据库不一致

我建议尝试以下解决方案:
1. 在MySQL查询中明确指定字符集: --default-character-set=utf8mb4
2. 使用Python的ftfy库修复文本编码问题
3. 在服务器上直接创建文件,然后打包下载,避免传输过程中的编码转换

让我为您实现这些方案...

Windsurf不仅识别出了问题,还分析了可能的原因,并提出了多种解决方案。这种深度分析能力远超传统编程工具。

2. 代码自动生成与优化, 技术选型、迭代、推荐与执行

Windsurf能够自己自动生成代码并不断优化,能够推荐并迭代最适合特定问题的技术方案来解决问题,而且是自己执行。

比如下面它自己思考出来的中文乱码问题解决方案:

python
import os
import ftfy

# 处理每篇文章
for md_file in md_files:
	file_path = os.path.join(my_blog_dir, md_file)

	# 读取文件内容
	with open(file_path, 'r', encoding='utf-8') as f:
		content = f.read()

	# 使用ftfy修复文本编码
	fixed_content = ftfy.fix_text(content)

	# 保存修复后的内容
	with open(file_path, 'w', encoding='utf-8') as f:
		f.write(fixed_content)

这种方法比手动处理编码转换更可靠,因为ftfy能够智能识别各种编码问题并自动修复。

总结

通过Windsurf的AI辅助编程能力,我们成功实现了从远程MySQL数据库导出文章到Markdown文件的任务,并解决了中文编码问题。整个过程展示了AI辅助编程的强大优势:

  1. 快速理解需求并转化为可执行代码
  2. 智能诊断问题并提供解决方案
  3. 推荐最适合的技术和库
  4. 生成完整、可用的代码
  5. 根据反馈不断优化解决方案

这种开发方式极大提高了编程效率,即使是面对复杂的编码问题,也能快速找到解决方案。Windsurf的AI辅助编程功能为开发者提供了强大的支持,使复杂任务变得简单,让开发过程更加高效和愉快。

希望这篇文章能够帮助您了解如何利用Windsurf的AI能力解决实际编程问题,特别是在处理数据导出和编码转换等复杂任务时。

520608.com 备案号:粤ICP备13053123号