本文主要介绍Django项目中SQLite3的初始化和使用。自己看教学视频的时候,按照老师的命令操作怎么都不成功,找了很久解决办法,现在记录下来,供大家学习。题主使用的是python3+SQLite3+Django1.11.
SQLite3的下载地址:http://www.sqlite.org/download.html,这是官方下载地址,我们需要下载的有两个文件:sqlite-dll-win64-x64-3190200.zip和sqlite-tools-win32-x86-3190200.zip(自己根据电脑在相关下载页下载)。文件无需安装,解压即可。注意在环境变量中添加SQLite3的路径(我的电脑->属性->高级系统设置->环境变量->系统变量,找到PATH,编辑值直接在后面添加D:\sqlite3\sqlite-tools-win32-x86-3190200;),方便使用。
推荐使用SQLiteStudio工具,这是一个SQLite3数据库的可视化工具,操作比较简单。下载链接:https://sqlitestudio.pl/index.rvt,直接下载安装即可。
下面介绍如何使用SQLite3:
1.配置Django项目中文件
①setting.py文件
找到DATABASES项,更改为: DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'blogDB.db'),
}
}
以上内容,ENGINE表示使用SQLite3数据库,NAME表示创建了一个名字为blogDB.db的数据库。
这是使用SQLite3数据库的配置,若是要使用其他数据库则需要另外配置,具体参见官方文档:https://docs.djangoproject.com/en/1.11/ref/settings/,搜索DATABASES即可查阅。
②models.py文件
models文件应该在你创建的app目录下,我创建了一个blog的app应用,所以在我的blog目录下(如果没有需要自己创建),如下图:
更改models.py文件内容为:
from django.db import models
# Create your models here.
class BlogArticle(models.Model):
title = models.CharField(max_length= 50)
author = models.CharField(max_length= 20)
time = models.IntegerField(default = 0)
2.将table同步到数据库
命令python3 manage.py makemigrations
命令行输出应该如下:
此处可能会出现一个问题:
仔细阅读提示信息,他告诉你,你准备向BlogArticle表中添加一个名为time的键(time键是我后来加的),但是却没有一个default值,所以需要在models.py文件中time = models.IntegerField(default = 0)中的default值需要设定一个,如果不设定就会出现上面问题(对的,我就是没有设定所以出现了上面的问题),任意值均可。title 和author 一般也应该有default值的,但这里不设置也不会出现问题,所以应该是他自己有,当然,你为了确保,自己设定一个值也是可以的。
命令python3 manage.py migrate
命令行输出如下就没问题。
解释:
第一条命令是将你对models.py文件中的改动保存到当前目录中一个叫migrations的文件夹中,但还未同步到数据库,第二条命令将改动同步到数据库。
3.查看
①在你Django项目对的文件夹中应当出现了一个blogDB.db的文件,它就是新建的数据库。有文件基本就表示ok了。
②(没有安装SQLiteStudio的可忽略这一步)我们可以用SQLiteStudio来查看我们新建的数据库。打开SQLiteStudio,左上角数据库->添加数据库,在弹出的窗口中找到我们新建的数据库打开:
然后在左边出现的数据库上右键点击连接数据库,
在出现的所有表中有一个blog_blogarticle就是我们新建的表,其余的都是系统自身的表,点击查看就会在右边显示,可以看到我们的表中有三个键。
总结:
我在使用的过程中主要出现了两个问题;
1.使用命令python3 manage.py makemigrations时,我少加了一个python3(根据你的python解释器来的,我看视频是讲解的老师没有加,所以。。。),结果
OH,what’s this?一脸懵逼,后来才发现问题。。
2.models.py文件中添加time = models.IntegerField(default = 0),开始我没加default,结果出现了前文所述的问题。
好吧,到现在,一切大功告成。
参考文章:http://blog.csdn.net/qq_21182587/article/details/69573850
来源:CSDN
作者:我是Coder
链接:https://blog.csdn.net/qq_34485436/article/details/72805908