python_django_web开发:6 ORM之创建models与数据库表

Render的第三个参数

返回给前端的数据 是从数据库中获取的

Models 模型

对应数据库的一张数据表 以类的形式表现

ORM 对象关系映射:所有对数据库的操作实际上是对类以及对类的对象的操作
隐藏了数据访问的细节,不需要写任何sql语句 实现了对象与数据库之间的映射

步骤:
1. 在应用根目录的models.py 引入models模块
1. 创建类 继承models.Model 该类就是一张数据表
1. 在类中创建字段

字段创建:
字段即类里面的属性
attr = models.CharField(max_length=64)

字段类型看文档:https://docs.djangoproject.com/en/1.11/ref/models/fields/

将模型映射成数据表:
1. python manage.py makemigrations app名
1. python manage.py migrate

  • migrate, which is responsible for applying and unapplying migrations.
  • makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.

makemigrations命令介绍

makemigrations与migrate区别

makemigrations作用:相当于在该app下建立 migrations目录,并记录下所有的关于modes.py的改动,比如0001_initial.py,
但是这个改动还没有作用到数据库文件

# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-02-10 02:25
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('blog', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            model_name='article',
            name='publish_time',
            field=models.DateTimeField(auto_now=True),
        ),
    ]

migrations命令作用:
将该改动作用到数据库文件,比如产生table,修改字段的类型等。

Django会在app/migrations/目录下生成移植文件
执行python manage.py sqlmigrate 应用名 文件id 可以查看sql语句,例如:

manage.py@test2 > sqlmigrate blog 0001
bash -cl "/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Applications/PyCharm.app/Contents/helpers/pycharm/django_manage.py sqlmigrate blog 0001 /Users/shixinshan/Development/DjangoProjects/test2"
BEGIN;
--
-- Create model Article
--
CREATE TABLE "blog_article" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(32) NOT NULL, "content" text NULL);
COMMIT;
Following files were affected
Process finished with exit code 0

生成的数据库在哪里? 使用了默认的sqlite3

查看并编辑db.sqlite3 使用第三方 轻量级 完全免费
Windows:sqlite expert personal
Mac:SQLiteStudio (推荐)

页面数据获取:
在views.py中import models
Article = models.Article.objects.get(pk=1) select 主键为1
render(request,page, {‘article’: article})
也支持对象的传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值