在SAE上同步djanogo的mysql数据库

时间:2024-05-26 21:37:44

折腾了一个下午,终于搞掂了把djanogo应用的mysql数据库导入到SAE上了,归根到底麻烦的根源是SAE限制多多。下面简单记录一下过程以备日后参考使用。

首先还是修改settings.py,把数据库设置部分修改如下,以便在线上,或是在本机也能调用到数据库:

if 'SERVER_SOFTWARE' in os.environ:
from sae.const import (
MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB,
)
else:
MYSQL_HOST = 'localhost'
MYSQL_PORT = ''
MYSQL_USER = 'local_user'
MYSQL_PASS = 'local_passwd'
MYSQL_DB = 'app_cjyfff' DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': MYSQL_DB,
'USER': MYSQL_USER,
'PASSWORD': MYSQL_PASS,
'HOST': MYSQL_HOST,
'PORT': MYSQL_PORT,
}
}

SAE的文档说可以线上创建自己的数据库的,但是我找了半天都没找到创建选项,只看到一个默认存在的数据库(本例中的app_cjyfff,这个名字取决于你所创建的app名称),于是我只好也在本地mysql上创建一个同名的数据库。注意创建时指定utf-8编码,否则中文会出现乱码。另外SAE对于个人用户,数据库只支持MyISAM引擎,所以在创建数据库之前记得修改my.cnf把默认引擎改为MyISAM。创建好app_cjyfff这个数据库后,到django的目录执行python manage.py syncdb命令在数据库中创建表,然后用mysqldump导出为sql文件。另外还要注意的是,可能由于SAE没有开放LOCK、UNLOCK的操作权限给用户,因此假如sql文件中有LOCK、UNLOCK语句的话会导致导入失败。把sql文件中的LOCK、UNLOCK语句删除即可。然后用SAE自带的phpMyAdmin把这个sql文件导入到SAE中吧。