迁移到GAE

2 投票
5 回答
872 浏览
提问于 2025-04-15 14:39

将MySQL表迁移到Google Datastore并为它们创建Python模型的最佳方法是什么?

我有一个用PHP和MySQL做的项目,现在想把它迁移到Python和GAE(Google App Engine)上。目前最大的难题就是迁移表格和创建相应的模型。每个表大约有110列,手动为这些表创建模型有点麻烦,更不用说还要创建一个加载器来导入生成的CSV表格了。

有没有更高效的方法来完成这个迁移呢?

5 个回答

1

如果我是你,我会写一个简单的Python脚本,来读取现有的MySQL数据库结构(可以用MySQLdb这个库),然后生成一个叫做models.py的文件来匹配这个结构。生成后,最好再手动检查和修改一下代码,以防出错。当然,这个前提是你对每个实体有“大约110个”属性的数据模型感到满意,并希望保留它。如果有必要的话,可以趁这个机会把模型拆分得更清晰一些(实际上,如果你现在的做法依赖于连接查询或其他GAE不支持的SQL功能,你可能必须这样做),不过这就需要更多的手动工作了。

一旦数据模型搭建好了,就可以进行批量加载,通常是通过中间的CSV文件来完成(生成这些文件的方法有很多种)。

4

一般来说,自动生成你的模型应该不会太难。假设你有一个csv文件,每个表格对应一个文件,文件中的每一行包含(字段名,数据类型),那么像下面这样的代码就可以完成这个工作:

# Maps MySQL types to Datastore property classes
type_map = {
    'char': 'StringProperty',
    'text': 'TextProperty',
    'int': 'IntegerProperty',
    # ...
}

def generate_model_class(classname, definition_file):
  ret = []
  ret.append("class %s(db.Model):" % (classname,))
  for fieldname, type in csv.reader(open(definition_file)):
    ret.append("  %s = db.%s()" % (fieldname, type_map[type]))
  return "\n".join(ret)

一旦你定义好了你的数据结构,就可以直接从数据库批量加载数据了,不需要中间的csv文件。你可以查看我关于这个主题的博客文章

2

approcket 是一个可以让 MySQL 数据库和 Google App Engine(简称 GAE)之间互相连接的工具,或者也可以通过 Google 提供的内置远程 API 来进行连接。

撰写回答