将MySQL表格迁移到Google Datastore并为其创建python模型的最佳方法是什么?
我有一个PHP + MySQL项目,我想迁移到Python + GAE项目。到目前为止,最大的障碍是迁移表格并创建相应的模型。每张桌子大约110列。手动为表创建模型有点单调乏味,更不用说创建加载器并导入生成的csv表表示。
我是否有更有效的方式进行迁移?
答案 0 :(得分: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文件。有关该主题,请参阅my blog post。
答案 1 :(得分:2)
approcket可以从谷歌中获取mysql⇌gae或gae builtin remote api
答案 2 :(得分:1)
在你的内容中,我会编写一个一次性的Python脚本来读取现有的MySQL模式(使用MySQLdb),生成要匹配的models.py(然后对生成的内容进行一些手动检查和编辑代码,以防万一)。假设每个实体具有“约110”属性的数据模型是您满意并希望保留的东西,当然;可能值得借此机会稍微分解一下(如果你当前的方法还依赖于GAE没有给你的连接或其他SQL功能,你可能不得不这样做),但这当然需要更多的手工工作。 / p>
数据模型到位后,bulk loading可能会发生,通常是通过中间CSV文件(有几种方法可以生成这些文件)。
答案 3 :(得分:1)
你可以migrate them to django models first
特别使用
python manage.py inspectdb > models.py
编辑models.py直到满意为止。您可能必须放入ForeignKeys,调整CharFields的长度等。
我已经将几个遗留数据库转换为django,并取得了很好的成功。
然而,Django模型与GAE模型(我不是很熟悉)不同,所以我不知道这可能不是非常有用!答案 4 :(得分:1)