我正在尝试使用 Django 框架建立一个网站。由于它的方便性,从我的项目开始我就选择 SQLite 作为我的数据库。它非常容易使用,我对这个解决方案非常满意。
作为一名新开发人员,我对 Github 和数据库管理相当陌生。由于 SQLite 数据库位于单个文件中,因此我能够将更新推送到 Github 上,直到 .db 文件达到大于 100MB 的临界大小。从那时起,我的文件似乎太大了,无法推送到我的存储库上(对于其他有同样问题的人,我在这里找到了满意的答案: GIT: Unable to delete file from repo )。
由于这个问题,我现在正在考虑替代解决方案:
由于我的网站也要求用户与我的数据库进行交互(他们需要发布一定量的数据),因此我正在考虑将 SQLite 切换为 MySQL。我被告知 MySQL 将更好地处理用户输入并且更容易扩展(我敢于期望大量用户)。这是我问题的第一部分。使用 SQLite 一段时间后切换到 MySQL 是一个好主意/好实践还是会导致迁移问题?
如果第一个问题的答案是肯定的,那么我还有关于如何处理此更改的其他问题。由于 SQLite 是无服务器的,我必须为 MySQL 设置一个新服务器。我可以通过该服务器远程访问我的数据吗?由于我过去常常将数据库推送到 Github 存储库上,因此当我想要远程工作时,我可以在此处获取数据。有没有办法让我将数据托管在服务器上(希望是免费的)并以与在 Github 上获取代码相同的方式获取数据?
非常感谢您的帮助,祝您度过愉快的一天。
最佳答案
首先,您不应将任何敏感数据上传到存储库。这包括数据库密码、Django 的 key 或 SQLite 情况下的数据库本身。
回答你的第一个问题,从 SQLite 切换到 MySQL 应该没有任何问题。 Django 处理迁移的能力非常出色,而 SQLite 的功能比 MySQL 少。要将数据迁移到 mysql 数据库,您可以使用 django 的 dumpdata和 loaddata .
现在,你的第二个问题有点复杂。您始终可以将数据库暴露在互联网上,但这通常不是一个好主意,除非您确切地知道自己在做什么并知道如何正确保护它。如果你走这条路,你可以 change the database parameters在您的设置文件中指向 MySQL 数据库的公共(public) IP 并添加数据库名称、用户和密码。
不过,我的建议是在您的开发 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
中,这样它就不会被推送到您的存储库,并且您的本地电脑中将有一个文件,而生产服务器中则有另一个具有不同设置的文件(您可以使用 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'],
}
}
关于python - Django 和 Github 上的数据库管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61127479/