Django 学习 2 MODEL数据建模

数据建模:以Mysql为例
1.Django 的 M(Model)T(Template)V(View)开发模式:
    M:数据存取层,处理与数据相关的存取、正确性确认、数据之间的逻辑、行为定义等所有的事务
    T:表现层,处理与表现相关的决策:如何在页面和其他类型中进行显示
    V:业务逻辑层,包含了存取模型,以及调用恰当模型的相关逻辑
在 Django 对 MVC 的诠释中,视图用来描述要展现给用户的数据;不是数据看起来 怎么样 ,而是要呈现 哪些 数据。相比之下,Ruby on Rails 及一些同类框架提倡控制器负责决定向用户展现哪些数据,而视图则仅决定 如何 展现数据,而不是展现 哪些 数据。

2.配置数据库,在settings中配置数据库。
settings.py codes:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',    #the name of used database
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': '',    #'' means localhost(127.0.0.1)
            'PORT': '3306', #'' means default
        }
    }


3.利用命令行检查链接:
>>>python manage.py shell
In [1]: from django.db import connection as conn
In [2]: cursor = conn.cursor()
In [3]: cursor
Out[3]: <django.db.backends.utils.CursorDebugWrapper at 0x3dba390>


4.0初始化App:
>>>python manage.py startapp books
books
│  admin.py
│  models.py
│  tests.py
│  views.py
│  __init__.py
│
└─migrations
        __init__.py


4.1实现model:用python代码来描述App逻辑:
models.py codes:
    from django.db import models

    # Create your models here.
    class Publisher(models.Model):
        def __unicode__(self):
            return self.name
        name = models.CharField(max_length=30)
        address = models.CharField(max_length=50)
        city = models.CharField(max_length=60)
        state_province = models.CharField(max_length=30)
        country = models.CharField(max_length=50)
        website = models.CharField(max_length=30)

    class Author(models.Model):
        def __unicode__(self):
            return first.name+' '+last_name
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=50)
        email = models.EmailField()

    class Book(models.Model):
        def __unicode__(self):
            return self.title
        title = models.CharField(max_length=1000)
        authors = models.ManyToManyField(Author)
        publishers = models.ForeignKey(Publisher)
        publication_date = models.DateField()


unicode方法实现对象的字符串显示
4.2将App添加到站点:
settings.py codes:
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'books',#添加这一行
    )


4.3修改/添加一个App:
>>>python manage.py makemigrations polls
将会给出修改的内容
4.5查看进行的第N步行为N~[1,9999]
>>>python manage.py sqlmigrate books 0001
BEGIN;
CREATE TABLE `books_author` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `
first_name` varchar(30) NOT NULL, `last_name` varchar(50) NOT NULL, `email` varc
har(254) NOT NULL);
CREATE TABLE `books_book` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `ti
tle` varchar(1000) NOT NULL, `publication_date` date NOT NULL);
CREATE TABLE `books_book_authors` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY
KEY, `book_id` integer NOT NULL, `author_id` integer NOT NULL, UNIQUE (`book_id`
, `author_id`));
CREATE TABLE `books_publisher` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY
, `name` varchar(30) NOT NULL, `address` varchar(50) NOT NULL, `city` varchar(60
) NOT NULL, `state_province` varchar(30) NOT NULL, `country` varchar(50) NOT NUL
L, `website` varchar(200) NOT NULL);
ALTER TABLE `books_book` ADD COLUMN `publishers_id` integer NOT NULL;
ALTER TABLE `books_book` ALTER COLUMN `publishers_id` DROP DEFAULT;
ALTER TABLE `books_book_authors` ADD CONSTRAINT `books_book_authors_book_id_30c6
61c_fk_books_book_id` FOREIGN KEY (`book_id`) REFERENCES `books_book` (`id`);
ALTER TABLE `books_book_authors` ADD CONSTRAINT `books_book_authors_author_id_40
7dfb10_fk_books_author_id` FOREIGN KEY (`author_id`) REFERENCES `books_author` (
`id`);
CREATE INDEX `books_book_authors_0a4572cc` ON `books_book_authors` (`book_id`);
CREATE INDEX `books_book_authors_4f331e2f` ON `books_book_authors` (`author_id`)
;
CREATE INDEX `books_book_3bcd2047` ON `books_book` (`publishers_id`);
ALTER TABLE `books_book` ADD CONSTRAINT `books_book_publishers_id_5fd67839_fk_bo
oks_publisher_id` FOREIGN KEY (`publishers_id`) REFERENCES `books_publisher` (`i
d`);

COMMIT;


4.6检查是否有错:
>>>python manage.py check
System check identified no issues (0 silenced).


4.7实施修改:
>>>python manage.py migrate
python 将根据models中的逻辑在数据库中创建表,每张表会自动生成一个自增的id主键

5.利用shell来认识models:
>>>python manage.py shell进入shell
In [1]: from books.models import Publisher
In [2]: Publisher.objects.all()
Out[2]: [<Publisher: Apress>]
In [5]: p = Publisher(name='Bpress',address='Other Address',city='b city',state_
province='CB',country='U.K')
In [6]: p
Out[6]: <Publisher: Bpress>
In [7]: Publisher.objects.all()
Out[7]: [<Publisher: Apress>]
In [8]: p.save()
In [9]: Publisher.objects.all()
Out[9]: [<Publisher: Apress>, <Publisher: Bpress>]
In [10]: Publisher.objects.order_by("name")#-name就是逆序
Out[10]: [<Publisher: Apress>, <Publisher: Bpress>]
In [11]: p = Publisher.objects.get(name='Apress')
In [12]: p.delete()
In [13]: Publisher.objects.all()
Out[13]: [<Publisher: Bpress>]
In [15]: Publisher.objects.filter(pk=2)
Out[15]: [<Publisher: Bpress>]
In [20]: Publisher.objects.filter(name__contains='p')
Out[20]: [<Publisher: Bpress>]
In [21]: Publisher.objects.filter(name__startswith='B')
Out[21]: [<Publisher: Bpress>]
In [22]: Publisher.objects.count()
Out[22]: 1
In [27]: p = Publisher.objects.all()[0]
In [28]: p.pk
Out[28]: 2L
In [37]: Publisher.objects.all().delete()
In [38]: Publisher.objects.all()
Out[38]: []


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值