将 MySQL 表迁移到 Google Datastore 并为它们创建 python 模型的最佳方法是什么?
我有一个 PHP+MySQL 项目,我想迁移到 Python+GAE 项目。到目前为止,最大的障碍是迁移表并创建相应的模型。每个表大约有 110 列宽。手动为表创建模型有点乏味,更不用说创建加载器和导入生成的 csv 表表示了。
有没有更有效的方法让我进行迁移?
将 MySQL 表迁移到 Google Datastore 并为它们创建 python 模型的最佳方法是什么?
我有一个 PHP+MySQL 项目,我想迁移到 Python+GAE 项目。到目前为止,最大的障碍是迁移表并创建相应的模型。每个表大约有 110 列宽。手动为表创建模型有点乏味,更不用说创建加载器和导入生成的 csv 表表示了。
有没有更有效的方法让我进行迁移?
一般来说,自动生成模型应该不会太难。假设每个表都有一个 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 文件。请参阅我关于该主题的博客文章。
approcket可以 mysql⇌gae 或 gae 内置远程 api 从谷歌
特别使用
python manage.py inspectdb > models.py
并编辑 models.py 直到满意。您可能需要放入 ForeignKeys,调整 CharFields 的长度等。
我已经成功地将几个遗留数据库转换为 django。
然而,Django 模型与 GAE 模型(我不太熟悉)不同,所以我不知道这可能不是很有帮助!
在你的鞋子里,我会写一个一次性的 Python 脚本来读取现有的 MySQL 模式(使用MySQLdb),生成一个 models.py 来匹配(然后对生成的代码进行一些手动检查和编辑,以防万一)。这是假设每个实体具有“大约 110 个”属性的数据模型是您满意并希望保留的东西,当然;借此机会将事情分解一下可能是值得的(实际上,如果您当前的方法还依赖于连接或 GAE 没有提供的其他 SQL 功能,您可能不得不这样做),但这当然需要更多的手动工作。
一旦数据模型到位,就可以进行批量加载,通常是通过中间 CSV 文件(有几种方法可以生成这些文件)。