2

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

我有一个 PHP+MySQL 项目,我想迁移到 Python+GAE 项目。到目前为止,最大的障碍是迁移表并创建相应的模型。每个表大约有 110 列宽。手动为表创建模型有点乏味,更不用说创建加载器和导入生成的 csv 表表示了。

有没有更有效的方法让我进行迁移?

4

5 回答 5

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 文件。请参阅我关于该主题的博客文章

于 2009-09-29T10:57:15.963 回答
2

approcket可以 mysql⇌gae 或 gae 内置远程 api 从谷歌

于 2009-09-29T11:04:17.853 回答
1

您可以先将它们迁移到 django 模型

特别使用

python manage.py inspectdb > models.py

并编辑 models.py 直到满意。您可能需要放入 ForeignKeys,调整 CharFields 的长度等。

我已经成功地将几个遗留数据库转换为 django。

然而,Django 模型与 GAE 模型(我不太熟悉)不同,所以我不知道这可能不是很有帮助!

于 2009-09-29T12:03:24.450 回答
1

你不需要

http://code.google.com/apis/sql/

:)

于 2011-11-01T18:47:28.687 回答
1

在你的鞋子里,我会写一个一次性的 Python 脚本来读取现有的 MySQL 模式(使用MySQLdb),生成一个 models.py 来匹配(然后对生成的代码进行一些手动检查和编辑,以防万一)。这是假设每个实体具有“大约 110 个”属性的数据模型是您满意并希望保留的东西,当然;借此机会将事情分解一下可能是值得的(实际上,如果您当前的方法还依赖于连接或 GAE 没有提供的其他 SQL 功能,您可能不得不这样做),但这当然需要更多的手动工作。

一旦数据模型到位,就可以进行批量加载,通常是通过中间 CSV 文件(有几种方法可以生成这些文件)。

于 2009-09-29T00:11:18.423 回答