【问题标题】:Django beginner problem: manage.py dbsyncDjango初学者问题:manage.py dbsync
【发布时间】:2010-11-08 06:11:54
【问题描述】:

我正在运行 ubuntu 9.04 32b,并从 Synaptics 获得了 django。 我的 settings.py 是为 sqlite3 数据库配置的。

我已经通过这个tutorial 并在尝试运行命令python manage.py syncdb 时遇到以下错误:

回溯(最近一次通话最后): 文件“manage.py”,第 11 行,在 执行管理器(设置) 文件“/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py”,第 340 行,在 execute_manager 实用程序.execute() 文件“/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py”,第 295 行,在执行 self.fetch_command(子命令).run_from_argv(self.argv) 文件“/usr/local/lib/python2.6/dist-packages/django/core/management/base.py”,第 192 行,在 run_from_argv self.execute(*args, **options.__dict__) 文件“/usr/local/lib/python2.6/dist-packages/django/core/management/base.py”,第 219 行,在执行 输出 = self.handle(*args, **options) 文件“/usr/local/lib/python2.6/dist-packages/django/core/management/base.py”,第 348 行,在句柄中 返回 self.handle_noargs(**options) 文件“/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py”,第 51 行,在 handle_noargs 游标 = 连接。游标() 光标中的文件“/usr/local/lib/python2.6/dist-packages/django/db/backends/__init__.py”,第 56 行 光标 = self._cursor(设置) _cursor 中的文件“/usr/local/lib/python2.6/dist-packages/django/db/backends/sqlite3/base.py”,第 145 行 self.connection = Database.connect(**kwargs) sqlite3.OperationalError:无法打开数据库文件

有人知道我的问题吗?

【问题讨论】:

    标签: django


    【解决方案1】:

    两天前我遇到了同样的问题。我通过将 DATABASE 字典(settings.py)中的“NAME”设置为绝对路径来解决它。 例如。

    settings.py

    DATABASES = {
        'default' : {
            'ENGINE' : 'django.db.backends.sqlite3',
            'NAME' : DATABASE_PATH,
        }
    }
    

    在这里你可以在 settings.py 的顶部设置 DATABASE_PATH (不确定这是否适用于 Windows)

    SETTINGS_DIR = os.path.dirname(__file__)
    PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir))
    DATABASE_PATH = os.path.abspath(os.path.join(PROJECT_PATH, 'your-database-name'))
    

    对于 Windows,您可能必须使用替换方法。 (不确定..但你可以尝试如下)

    PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir).replace('\\', '/'))
    

    DATABASE_PATH 也是如此。 PS。如果我错了,请纠正我。

    【讨论】:

      【解决方案2】:

      我遇到的问题是一个引导问题,在导入时(在任何类或函数之外)进行了一些模型查找。 Per the docs,这是个坏主意。

      【讨论】:

        【解决方案3】:

        如果您指定了 db 文件的完整路径,但仍有问题,请尝试在字符串前添加 r。

        即。

        r'C:\home\usr\mysite\sqlite3.db'
        

        【讨论】:

        • 这表示正则表达式,但您要解决的问题是 Python 不喜欢单个反斜杠。使用'C:\\home\\usr\\mysite\\sqlite3.db' 会更好
        • @Tom 它并不表示正则表达式。它告诉 python 将其视为 原始字符串文字stackoverflow.com/a/2081708/2259303
        • 呃,我的错。我使用它的 99% 时间都是用于 Django url,所以我已经把它卡在了我的脑海里。对不起。
        【解决方案4】:

        与 user104264 的回答类似 - 不同的角度...

        目前关注YouTube tutorial 我遇到了同样的错误。在我看来,在 virtualenv django 项目目录中运行 manage.py ...虚拟环境的路径 .../django_project/ 时,/myapp/settings.py 中的数据库名称只是“storage.db”所以

        (django-v)...虚拟环境项目的路径.../django_project/>python manage.py syncdb

        创建了...虚拟环境项目的路径.../django_project/storage.db

        -比尔

        【讨论】:

          【解决方案5】:

          如果您的数据库名称与项目名称相同,也会发生这种情况。要修复它,只需更改数据库的名称,例如通过将 .db 添加到 NAME。因此,如果您在 settings.py 中的 DATABASE NAME 是“epic_project”,请将其更改为“epic_project.db”


          冗长乏味的解释

          如果你通过运行开始你的项目:

          django startproject epic_project
          

          您的文件夹结构将如下所示:

          • /path/to/epic_project/
            • manage.py
            • epic_project/
              • settings.py

          如果然后在您的 settings.py 中将您的数据库设置为:

          DATABASES = {
              'default': {
                  'ENGINE': 'django.db.backends.sqlite3',
                  'NAME': 'epic_project',
                  ...
              }
          }
          

          什么时候

          python manage.py syncdb 
          

          运行它会尝试在 /path/to/epic_project/epic_project 打开或创建一个 sqlite db 文件,但是那里有一个目录,所以它说“哦,好的路径已经存在,让我们将它作为一个 sqlite db 打开” ,不幸的是对于 sqlite 它是一个目录而不是数据库,所以它会哭泣并且 django 将这些眼泪呈现给你“sqlite3.OperationalError:无法打开数据库文件”

          【讨论】:

          • 幽默加 1
          【解决方案6】:

          我在 Windows 上遇到了同样的问题,然后意识到如果指定的文件夹不存在,syncdb 将不会创建它。我在设置中指定了c:/mysite/db/sqlite3.db,但/db/ 文件夹不存在。在终端中创建它然后成功重新运行syncdb。

          【讨论】:

            【解决方案7】:

            为了谷歌:

            数据库的路径必须是文件的完整路径 --- 而不仅仅是文件所在的目录。

            【讨论】:

            【解决方案8】:

            在 settings.py 中你使用的是 sqlite 文件的相对路径吗?

            如果是,请尝试将其更改为绝对路径。

            即而不是:

            ~/project/mydata.db
            

            使用

            /home/user/project/mydata.db
            

            【讨论】:

            • 这几乎总是问题所在。 Python 在读取这些文件时不会进行路径扩展。
            【解决方案9】:

            可能是权限问题,您的用户是否有足够的权限在文件夹上写入?例如,如果你这样做

            sudo python manage.py syncdb
            

            相反,它有效吗?

            【讨论】:

              猜你喜欢
              • 2021-07-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-04
              • 2020-11-23
              • 2015-03-16
              • 2012-04-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多