Django 中的 SQLite 3 数据库

6

我在Django文档教程中关于显示SQLite表格的部分卡住了。

" 如果你感兴趣,运行数据库的命令行客户端并键入\dt(PostgreSQL)、SHOW TABLES;(MySQL)或.schema(SQLite),以显示Django创建的表格。"

我已经创建了一个名为mysite的项目。位置:C:\Python34\Scripts\mysite

mysite文件夹里有mysite文件夹、db.sqlite3manage.py

我打开命令提示符并导航到C:\Python34\Scripts\mysite,然后输入.schema,它返回“不识别.schema”。

我的settings.py数据库文件:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join('BASE_DIR' , 'db.sqlite3'),
    }
}

我也无法定义BASE_DIR。我不了解db.sqlite3文件。我不能确定该文件是否为.db扩展名。

有人能帮我找出来吗?

5个回答

9

.schema是在sqlite3命令行界面中运行的命令,用于获取该数据库中表的列表。

如果您尚未安装它,可以在此处下载并安装sqlite3命令行界面: https://www.sqlite.org/download.html

安装完sqlite3后,您可以:

  • 将目录更改为包含sqlite3数据库文件的文件夹

    cd C:\Python34\Scripts\mysite

  • 使用sqlite3命令行界面打开数据库文件

    sqlite3 db.sqlite3

  • 在sqlite3命令行界面提示符处键入.schema以获取表列表

    .schema


Django文档指出:“默认情况下,配置使用SQLite。如果您是数据库新手,或者只是想尝试Django,这是最简单的选择。SQLite已经包含在Python中,因此您不需要安装其他任何内容来支持您的数据库。”这是否意味着我不需要再安装SQLite了? - billyhalim25
然后您应该能够在Windows控制台中键入“sqlite3 -version”并获得响应。如果是这样,您就不需要安装sqlite3命令行界面。您可以继续执行其余步骤。 - Joe Young
似乎出现了“sqlite3未被识别”的问题。那么,我需要重新安装对吧? - billyhalim25
2
我认为Django为你安装的只是sqlite3数据库驱动程序。所以从技术上讲,你不需要sqlite3命令行界面来运行带有sqlite3支持的Django项目。只有在想要在Django之外的数据库中查看内容时,才需要sqlite3命令行界面。所以是的,如果你想使用".schema"命令查看其中的内容,你需要安装sqlite3命令行界面。 :) - Joe Young
好的,我会安装它。谢谢你的解释。 - billyhalim25

5
你没有“运行数据库的命令行客户端”,你只是导航到了目录。命令行客户端是“sqlite3”,但在Windows上可能没有安装。
你不需要定义BASE_DIR,它已经在设置文件中更高处定义好了,但你需要将其作为变量而不是字符串来引用。
'NAME': os.path.join(BASE_DIR , 'db.sqlite3'),

哦..我想我得把"BASE_DIR"改成一个位置。谢谢你的解释。 - billyhalim25

2

BASE_DIR 不是一个字符串。它是一个变量,其值在 settings.py 文件中由 Django 自动声明。您只需要在使用 BASE_DIR 时删除引号即可。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR , 'db.sqlite3'),
    }
}

感谢您的解释。 - billyhalim25

1

您可能需要在settings.py文件中更改数据库设置。 将'NAME':'db.sqllite3',放置在Database字典中。

这将在您的项目目录中创建db.sqlite3文件。它解决了我的问题。希望这可以帮到您。


0

BASE_DIR 是变量而不是字符串,需要添加 import os 和 BASE_DIR 以备需要。

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR , 'db.sqlite3'),
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接