Django和Github上的数据库管理



我正在尝试使用Django框架建立一个网站。由于它的方便,我从项目开始就选择了SQLite作为我的数据库。它很容易使用,我对这个解决方案很满意。

作为一名新的开发人员,我对Github和数据库管理还很陌生。由于SQLite数据库位于一个文件中,我可以在Github上推送我的更新,直到.db文件达到大于100MB的临界大小。从那以后,我的文件似乎太大了,无法推送到我的存储库中(对于其他有同样问题的人,我在这里找到了令人满意的答案:GIT:无法从存储库中删除文件(。

由于这个问题,我现在正在考虑另一种解决方案:

由于我的网站也需要用户与我的数据库进行交互(预计他们会发布一定数量的数据(,我正在考虑将SQLite切换为MySQL。我被告知MySQL将更好地处理用户输入,并将更容易扩展(我敢预计会有大量用户(。这是我问题的第一部分。在使用SQLite一段时间后切换到MySQL是一个好主意/好做法,还是会导致迁移问题?

如果第一个问题的答案是肯定的,那么我还有其他关于如何处理这一变化的问题。由于SQLite是无服务器的,我将不得不为MySQL设置一个新的服务器。我能用那台服务器远程访问我的数据吗?由于我过去常常在Github存储库上推送我的数据库,所以当我想远程工作时,这就是我获取数据的地方。有没有一种方法可以让我在服务器上托管数据(希望是免费的(,并像在Github上获取代码一样获取数据?

非常感谢你的帮助,希望你今天过得愉快。

首先,您不应该将任何敏感数据上传到存储库。这包括数据库密码、Django的密钥或SQLite中的数据库本身。

在回答您的第一个问题时,从SQLite切换到MySQL应该不会有任何问题。Django异常处理迁移,而SQLite的功能比MySQL少。要将数据迁移到mysql数据库,可以使用django的dumpdata和loaddata。

现在,你的第二个问题有点复杂。你可以随时将你的数据库暴露在互联网上,但这通常不是一个好主意,除非你确切地知道自己在做什么,并知道如何正确地保护它。如果你这样做,你只需要在设置文件中更改数据库参数,指向MySQL数据库的公共IP,并添加数据库名称、用户和密码。

不过,我的建议是,在您的开发PC中有一个数据库进行开发,在防火墙后面的生产服务器中有另一个数据库,只能通过localhost访问。如果你有足够的样本数据,我认为你不需要你的开发pc中的数据库总是最新的。

因此,您可以在项目的根目录中创建一个secrets.json文件,而不是将敏感数据写入设置文件:

{
"secret_key": "YOURSUPERSECRETKEY",
"debug": true, TRUE IN YOUR DEV PC, FALSE IN YOUR PROD SERVER
"allowed_hosts": ["127.0.0.1" , "localhost", "YOUR"], 
"db_name": "YOURDBNAME",
"db_user": "YOURDBUSER",
"db_password": "YOURDBPASSWORD",
"db_host": "localhost",
"db_port": 3306
}

该文件应包含在.gitignore中,这样它就不会被推送到您的存储库中,并且您的本地pc中会有一个,生产服务器中会有另一个具有不同设置的文件(您可以使用vi或nano创建该文件(。

然后在settings.py文件中,您可以执行以下操作:

import json
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
try:
with open(os.path.join(BASE_DIR, 'secrets.json')) as handle:
SECRETS = json.load(handle)
except IOError:
SECRETS = {}

SECRET_KEY = SECRETS['secret_key']
ALLOWED_HOSTS = SECRETS['allowed_hosts']
DEBUG = SECRETS['debug']
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': SECRETS['db_name'],
'USER': SECRETS['db_user'],
'PASSWORD': SECRETS['db_password'],
'HOST': SECRETS['db_host'],
'PORT': SECRETS['db_port'],
}
}

最新更新