目前正在处理Django教程并在我尝试时遇到此错误:
python manage.py syncdb
使用sqlite3
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/Library/Python/2.6/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
cursor = connection.cursor()
File "/Library/Python/2.6/site-packages/django/db/backends/__init__.py", line 306, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "/Library/Python/2.6/site-packages/django/db/backends/sqlite3/base.py", line 281, in _cursor
self._sqlite_create_connection()
File "/Library/Python/2.6/site-packages/django/db/backends/sqlite3/base.py", line 271, in _sqlite_create_connection
self.connection = Database.connect(**kwargs)
sqlite3.OperationalError: unable to open database file
我的settings.py文件显示为:
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '/Users/username/django_tutorial/mysite',
有人知道这里的问题吗?好像我正在放入完整的文件目录,但数据库仍然无法创建? ):
答案 0 :(得分:4)
您应该使用文件的路径,包括文件名:
'NAME': '/Users/username/django_tutorial/mysite/data.sqlite',
你也可以给它一个文件名:
'NAME': 'data.sqlite',
在这种情况下,它将在与运行manage.py
的目录相同的目录中创建。
最佳做法是传递绝对路径,但要确保相对于设置文件创建此绝对路径。 E.G:
import os
SETTINGS_DIR = os.path.dirname(os.path.abspath(__file__))
然后是后者:
'NAME': os.path.join(SETTINGS_DIR, 'data.sqlite'),
请记住,设置文件是一个Python文件,您可以在其中使用Python代码。
答案 1 :(得分:1)
项目维基上有一个Django新手错误列表。请参阅此条目:https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3
这个特定错误是Django新手的常见错误。请参阅下面的详细说明。
问题
您正在使用SQLite3,您的
DATABASE_NAME
设置为 数据库文件的完整路径,数据库文件可由Apache写入, 但你仍然得到上述错误。<强>解强>
确保Apache也可以写入父目录 数据库。 SQLite需要能够写入此目录。
确保数据库文件的完整路径中的每个文件夹都无法启动 与数字,例如。
/www/4myweb/db
(在Windows 2000上观察到)。如果
DATABASE_NAME
设置为类似的话'/Users/yourname/Sites/mydjangoproject/db/db'
,请确保您 创造了&#39;db
&#39;目录优先。确保您的
/tmp
目录是全球可写的(不太可能是因为 你系统上的其他东西也行不通)。ls /tmp -ald
应该 产生drwxrwxrwt
....确保
settings.py
中指定的数据库路径已满 路径。如果你在Windows上工作,也要确保你有路径 用双反斜杠写的db目录
'C:\\django\\sqlite\\django.db'
答案 2 :(得分:0)
我认为你不需要名称的完整路径,只需输入文件名即“my_db.db”即可。假设您已安装sqlite3。