我可以翻译为:我能否将Django数据库路径(对于sqlite3)“跨平台”?

10
我正在学习Django和Python(以及编程一般知识)。为了简单起见,我在学习Django等教程时使用sqlite3作为我的数据库。
我是一个多平台用户(Mac OS、Windows、Linux),取决于我当时所处的位置。因此,我将我的编程项目放在Dropbox中,这样我就可以从任何地方处理相同的代码。
问题在于,在特定项目的settings.py文件中,我像这样指定数据库路径:
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.sqlite3',                             # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'C:/Users/David/Dropbox/programming/mysite/database',       # Or path to database file if using sqlite3.

...但是当我使用MacOS或Linux时,显然C:/会出现问题。 我想知道是否有人有一个简单的解决方法。 当然,我可以通过MySQL或其他方式在我的Web服务器上远程设置数据库,但我认为可能有一种简单的方法,例如使用“if”语句。


OT:请问您是如何跨平台工作的?您在每台计算机上都安装了特定于操作系统的Python吗?您是否在每台计算机上设置了虚拟环境?谢谢。 - Bakaburg
3个回答

23

settings.py中使用相对路径是个常见的做法,被很多人认为是最佳实践。可以尝试这样设置:

from os.path import dirname, join

PROJECT_DIR = dirname(__file__)

DATABASES = {
    # ...
    'NAME': join(PROJECT_DIR, 'your_db_name.db'),
    # ...
}

2

我根据需要使用上述两种方法。相对路径在我的所有项目中都有,但有些需要平台检测。

第三种方法是将一个不受版本控制的local_settings文件导入到主设置文件中。from local_settings import * - 这个本地设置文件可以为每个环境设置不同。如果你想变得更加高级,你可以放置一些适合你的环境检测,并导入适当的windows、osx或linux文件。

如果你有三个环境,这种方法是干净且可能更可取的,因为它不会使你的settings.py充斥着所有环境设置。

Django Local Settings

我个人甚至为每个环境拥有更精细的设置文件,例如一个用于数据库选择的文件(有时,我需要一个空的sqlite db来轻松重置),启用S3,调试工具栏,本地开发(模板调试,缩略图调试等),缓存开/关,以便我可以混搭任何我需要的生产、暂存、各种级别的暂存调试和本地开发。


你链接的那个问题的被接受答案非常准确,也是最佳实践--将 from local_settings import * 包装在 try catch 中。https://dev59.com/r2445IYBdhLWcg3wWI6L#4909964 - istruble

1

这不是一个很好的解决方案,但你可以测试一下你正在运行的平台,例如:

import platform
'NAME': 'C:/Users/David/Dropbox/programming/mysite/database' if platform.system() == 'Windows' else '<Linux path to sqlite>'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接