Python django sqlite3数据库第一次查询时出现操作错误
myPython django sqlite3数据库第一次查询时出现操作错误,python,django,sqlite,Python,Django,Sqlite,mysettings.py的开头包含以下内容 import os, sys PROJECT_PATH = os.path.dirname(os.path.abspath(__file__)) CURRENT_DIR = os.path.dirname(__file__) TEMPLATE_DIRS = (os.path.join(CURRENT_DIR, 'templates'),) STATICFILES_DIRS
settings.py
的开头包含以下内容
import os, sys
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
CURRENT_DIR = os.path.dirname(__file__)
TEMPLATE_DIRS = (os.path.join(CURRENT_DIR, 'templates'),)
STATICFILES_DIRS = (os.path.join(CURRENT_DIR, 'static'),)
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/ubuntu/myapp/myapp',
}
}
从views.py
调用数据库后,我在错误日志中得到以下信息
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 372, in count
[time] [error] return self.query.get_count(using=self.db)
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 423, in get_count
[time] [error] number = obj.get_aggregation(using=using)[None]
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 389, in get_aggregation
[time] [error] result = query.get_compiler(using).execute_sql(SINGLE)
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 839, in execute_sql
[time] [error] cursor = self.connection.cursor()
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 324, in cursor
[time] [error] cursor = self.make_debug_cursor(self._cursor())
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 306, in _cursor
[time] [error] self._sqlite_create_connection()
[time] [error] File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 296, in _sqlite_create_connection
[time] [error] self.connection = Database.connect(**kwargs)
[time] [error] OperationalError: unable to open database file
如何在
settings.py
中正确引用我的数据库文件?名称:'/home/ubuntu/myapp/myapp'
在我看来,你引用的是一个文件夹而不是一个文件。对于SQLite,数据库名称必须是完整路径,包括文件名,因此,由于您已经以编程方式获得了项目的文件夹,因此可以使用它来构造文件路径:
'NAME':os.path.join(PROJECT_path,'mydb.db')
您需要运行python manage.py syncdb
,因为该进程将创建数据库,然后您才能在views.py
或其他任何地方访问它。您是否使用uwsgi/guinicorn运行此程序?该进程是否具有访问数据库文件的权限?有一个wsgi.py
文件您使用的是apache/wsgi还是单独的wsgi服务器,如uwsgi或gunicorn?在Linux系统中,文件不需要扩展名。是的,但在我看来,似乎他指定了myapp的virtualenv名称,下一个myapp是实际的项目文件夹…虽然我只是在这里猜测,但可能是错误的是…当我在django存储库的根目录中运行文件myapp
时,我得到myapp SQLite 3.x数据库
我尝试了'NAME':os.path.join(项目路径,'mydb.db'))
并得到相同的错误我运行了python manage.py syncdb
并得到了(使用./manage.py migrate来迁移这些错误)
因为您正在向南运行。我删除了数据库文件myapp
并再次运行了python manage.py syncdb
,没有收到上述错误,但在运行时仍然收到了操作错误。