【问题标题】:Can I make the Django database path (for sqlite3) "cross-platform"?我可以使 Django 数据库路径(对于 sqlite3)“跨平台”吗?
【发布时间】:2012-06-09 00:04:47
【问题描述】:

我正在学习 Django 和 Python(以及一般的编程)。为了简单起见,我使用 sqlite3 作为我的数据库,同时我正在阅读 Django 等教程。

我是一个多平台用户(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 或其他方式在我的网络服务器上远程设置我的数据库,但我认为可能有一种简单的方法来做到这一点,例如使用 'if' 语句。

【问题讨论】:

  • OT:请问您是如何跨平台工作的?您是否在您使用的每台机器上安装了特定于操作系统的 python?您是否也在每台机器上都设置了 virtualenv?谢谢

标签: python windows django linux macos


【解决方案1】:

使用relative paths in 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 中。 stackoverflow.com/a/4909964/169121
    • 非常感谢您的帮助:)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多