0

我想在syncdb之后添加一些python代码,所以我决定写一个build.py包括syncdb在内的所有东西。

我写了一些东西build.py

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.management import call_command
from django.contrib.auth.models import User
call_command('syncdb', interactive=False)

但是当我运行时build.py,它说:

Traceback (most recent call last):
  File "/home/csimstu/PycharmProjects/TeenHope/TeenHope/build.py", line 5, in <module>
    call_command('syncdb', interactive=False)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 161, in call_command
    return klass.execute(*args, **defaults)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 255, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 385, in handle
    return self.handle_noargs(**options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py", line 56, in handle_noargs
    cursor = connection.cursor()
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 324, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 306, in _cursor
    self._sqlite_create_connection()
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 296, in _sqlite_create_connection
    self.connection = Database.connect(**kwargs)
sqlite3.OperationalError: unable to open database file

我已经尝试过 ./manage.py syncdb 并在交互式 shell 模式下使用 call_command,两种方式都可以正常工作。怎么会这样?

4

1 回答 1

1

如果找不到数据库文件,那可能是因为您没有在设置中使用完整路径。

import os
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.realpath(os.path.join(os.path.dirname(__file__), "relative_path_here", "database.db")),

题外话:我建议将 Fabric 用于此类命令。

于 2013-08-02T03:20:21.087 回答