sqlite3.OperationalError:无法打开数据库文件

4xrmg8kj  于 2023-10-23  发布在  SQLite
关注(0)|答案(8)|浏览(207)

我在Django中设置服务器时遇到这个错误。它是sqlite3,这意味着它应该创建.db文件,但它似乎没有这样做。我已经规定SQLite作为后端,并为放置它的位置提供绝对文件路径,但没有运气。
这是一个bug还是我做错了什么?(我只是在想,Ubuntu中的绝对文件路径是否有所不同?)
下面是我的settings.py文件的开头:

# Django settings for OmniCloud project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
# ('Your Name', '[email protected]'),
)

MANAGERS = ADMINS

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': '~/Harold-Server/OmniCloud.db',                      # Or path to database file if using sqlite3.
    'USER': '',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
}
}
lzfw57am

lzfw57am1#

Django Newbie错误
问题你使用的是SQLite3,你的DATABASE_NAME被设置为数据库文件的完整路径,数据库文件是可写的Apache,但你仍然得到上述错误。
解决方案确保Apache也可以写入数据库的父目录。SQLite需要能够写入此目录。
确保数据库文件的完整路径的每个文件夹都不以数字开头,例如。/www/4 myweb/db(在Windows 2000上观察到)。
如果DATABASE_NAME设置为类似'/Users/yourname/Sites/mydjangoproject/db/db'的值,请确保您已首先创建'db'目录。
确保你的/tmp目录是全局可写的(这是一个不太可能的原因,因为你系统上的其他东西也不起作用)。ls /tmp -ald应该产生drwxrwxrwt.
确保在settings.py中指定的数据库路径是完整路径。
还请确保文件出现在您期望的位置。

lqfhib0f

lqfhib0f2#

我面临着完全相同的问题。这是我的设置工作。

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3'

在sqlite3的情况下,其他设置将是相同的/默认值。
您需要创建data.sqlite3。

fzwojiic

fzwojiic3#

您没有指定绝对路径-您使用了快捷方式~,这在此上下文中可能不起作用。使用/home/yourusername/Harold-Server/OmniCloud.db代替。

xmd2e60i

xmd2e60i4#

您需要使用完整路径而不是~/
在您的情况下,类似于/home/harold/Harold-Server/OmniCloud.db

jc3wubiy

jc3wubiy5#

在我的例子中,sqlite db文件db.sqlite3存储在apache的DocumentRoot中。因此,即使设置了以下权限,它也不起作用:

sudo chown www-data:www-data /path/to/db-folder
sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db

最后,当我将db.sqlite3移动到DocumentRoot下新创建的文件夹dbfolder并给予上述权限时,它工作了。

ryevplcw

ryevplcw6#

我在使用Apache时遇到了这个问题,发现在我的.env ////中使用sqlite3 db的绝对路径而不是使用相对路径///解决了这个问题。上面提到的所有权限和所有权也是必要的。

0yg35tkg

0yg35tkg7#

使用这种类型,它对我有效。Windows 7,Python 2.7和Django 1.5

'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:\\tool\\mysite\\data.db',

希望他的作品…

kdfy810k

kdfy810k8#

在同一个案例中,问题出在空写权限上。

sudo chmod -R o+w ./dir/

相关问题