• [Django_1_2]数据库设置


    Django 数据库设置

    本篇将介绍Django中的数据库设置,了解模型(models,数据库中的表项设计)。
    上一篇文章为:<a href="http://www.cnblogs.com/guoyunzhe/p/5778295.html", target="_blank"> Django 第一个app

    选择数据库类型

    Django默认使用的是SQLite,同时还支持MySQL、PostgreSQL等数据库。本篇文章中主要关注Django,所以就按照默认配置,使用SQLite。

    我们看到mysite/setting.py中的DATABASE字典中的定义,这里是默认的SQLite选项:

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

    ENGINE字段是选择用什么数据库引擎,常见的数据库还可以用:

    • django.db.backends.postgresql -- 使用PostgreSQL
    • django.db.backends.mysql -- 使用MySQL
    • django.db.backends.oracle -- 使用Oracle

    NAME字段在SQLite中是数据库文件的地址,路径内容是BASE_DIR, 'db.sqlite3',其中'db.sqlite3'是文件名,这个文件就在:

    guoyunzhe:mysite guoyunzhe$ tree -L 1
    .
    ├── db.sqlite3  --------->>>>  SQLite数据库文件
    ├── manage.py
    ├── mysite
    └── polls
    
    2 directories, 2 files
    
    

    如果使用其他数据库,还需要提供:USERPASSWORDHOST等内容。

    在编辑setting.py时,可以设置时区:TIME_ZONE = 'Asia/Shanghai'

    另外我们看一看INSTALLED_APPS字段,并解释一下默认的这行内容:

    • django.contrib.admin -->> admin站点,我们会在之后提起。
    • django.contrib.auth -->> 一个认证系统。
    • django.contrib.contenttypes -->> 一个用于contenttypes的框架。
    • django.contrib.sessions -->> 一个会话框架。
    • django.contrib.messages -->> 一个消息框架。
    • django.contrib.staticfiles -->> 一个静态文件管理框架。

    在前面,我们执行python3 manage.py migrate 命令时,Django会查看INSTALLED_APPS中的设置,并且根据其中的模型对数据库中的内容作出修改。
    关于模型,将在下面介绍。

    创建模型

    现在,我们创建自己的模型,也就是数据库设计。

    在<a href="http://www.cnblogs.com/guoyunzhe/p/5778295.html", target="_blank">上篇文章中创建的应用polls中,创建自己的模型。

    编辑文件polls/models.py

    from django.db import models
    from django.utils import timezone
    import datetime
    
    class Question(models.Model):    # Question表
        question_text = models.CharField(max_length=200) # 列question_text, 最大长度200
        pub_date = models.DateTimeField('date published') # 时间
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete = models.CASCADE)
        choice_text = models.CharField(max_length = 200)
        votes = models.IntegerField(default = 0)
    

    代码中,每个类都是django.db.models.Model的子类,都有一些我们定义的变量,这些变量称为域(Field)

    每个域都被定义为某种Field类型的数据,如:

    • CharField 代表字符类型, 这里还设置了最大长度为200;在数据库中可以表达为 vchar(200)
    • DateTimeField 代表时间类型。
    • IntegerField 代表整形。
    • 还有其他类型的域,比如TextField等,使用方法类似,以后看到的时候再详细说就行。

    注意还有一个:在Choice模型中定义了一个ForeignKey, 这告诉Django每一个Choice都对应了唯一的一个Question。Django支持所有数据库关系,包括:many-to-one、many-to-many 和one-to-one。

    激活模型

    通过以上的改变,Django可以做一下的操作:

    • 为我们的polls应用在数据库中创建相关的表。
    • 为Choice和Question模型,创建Python编写的数据操作API。

    但是我们首先需要告诉项目,polls应用已经被安装了。

    编辑mysite/setting.py(没错就是刚才打看的那个),我们需要改一下INSTALLED_APPS字段。

    INSTALLED_APPS = [
        'polls.apps.PollsConfig', # --->>> 增加的polls应用
        # ......
    ]
    

    好奇心比较严重,我们查看下这个路径中的这个方法,在polls/apps.py中:

    from django.apps import AppConfig
    
    class PollsConfig(AppConfig):
        name = 'polls'
    

    所以相当于在INSTALLED_APPS这个列表中增加了一个'polls'。看过别的教程有直接写'polls'的,是一样的意思。于是现在Django知道我们安装了polls应用。

    下面做下一件事,使用命令python3 manage.py makemigrations polls

    命令** makemigrations**的意思是,告诉Django你对项目的模型作出了一些改变,并且你想把这些改变生成相应的接口存储起来。

    可以看到,对模型的改变存储在了polls/migrations/0001_initial.py中,这些是Django自动生成的,如果想手动修改,就要改这个文件。

    下面这个命令将允许你查看Django自动生成的SQL语句,用于将上面的改变应用于数据库中,python3 manage.py sqlmigrate polls 0001

    上面的GIF是使用默认SQLite生成的,使用不同的数据库引擎生成的语句不同。

    这个命令只是生成SQL语句给你看看,不会执行打印在屏幕中的语句。如果需要执行,需要执行命令python3 manage.py migrate

    在执行这条命令之前,可以使用check来检查作出的改变有没有问题:

    使用数据API

    通过shell命令可以进入交互式解释器界面中:

    进入解释器之后,首先需要导入我们刚才建立的两个模型:from polls.models import Question, Choice

    然后可以使用一系列Django为我们生成的API,具体介绍我们在下一篇博文中仔细看一看。

  • 相关阅读:
    应用js改变问章字体大小
    在北京实习的日子
    php算法
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    130 个你需要了解的 vim 命令
    分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
    使用apache自带日志分割模块rotatelogs,分割日志
    centos下lvs配置
    分享codeigniter框架,在zend studio 环境下的代码提示
    vi 常用命令
  • 原文地址:https://www.cnblogs.com/guoyunzhe/p/5789394.html
Copyright © 2020-2023  润新知