Python学习笔记-数据库的使用(三)
1 Django中表之间关系many-to-one
1) 新建项目、应用
#django-admin.py startproject web_05
#django_admin.py startapp blog
2) 修改settings.py
3) 创建数据库名称
#mysql –u root –p
Mysql>create database web_05 default charset=utf8;
4) 编码models.py
from django.db import models
class Animal(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Dog(models.Model):
name = models.CharField(max_length=15)
anim = models.ForeignKey(Animal)
def __unicode__(self):
return self.name
5) 创建对象
#python manage.py shell (进入解释器环境)
a) 创建对象one:
>>>a1 = Animal.objects.create(name = ‘A1’)
>>>a2 = Animal.objects.create(name = ‘A2’)
>>>a3 = Animal.objects.create(name = ‘A3’)
b) 创建对象many:
>>>dog1 = Dog.objects.create(name = ‘d1’, anim = a1)
6) 查看
>>>dog1.anim(利用many)
>>>a1.blog_set.all()(利用one的结果集合)
2 Admin后台管理数据库
2.1 创建admin的账户和密码
#python manage.py createsuperuser
1) Settings.py 与urls.py不需要修改
2) 编码models.py
3) 注册Person类
#vim blog/admin.py
from django.contrib import admin
from blog.models import Person
admin.site.register(Person)
3 Django中表之间关系Many-to-Many
1) 创建工程、应用
2) 创建数据库名称
#mysql –uroot –p
Mysql>create database web_07;
3) 设置blog/settings.py
4) 编码blog/models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length=20)
authors = models.ManyToManyField(Author)
def __unicode__(self):
return self.name
5) 更新数据库
#python manage.py makemigrations blog(应用名称)
#python manage.py migrations
6) 对models的对象进行操作
#python manage.py shell
l 对Author操作
>>>Author.objects.create(name = ‘Sheldon’)
>>> Author.objects.create(name = 'Penny')
>>> Author.objects.create(name = 'Leonard')
>>> Author.objects.create(name = 'Howard')
l 对Book操作
>>>book1 = Book()
>>>book1.name = ‘The Big Bang’
>>>book1.save()
>>>author = Author.objects.all()
>>>book1.authors.add(author[0])(添加author)
>>>p = Author.objects.get(name__exact = ‘Penny’)或创建时p = Author.objects.create(name = 'Penny')
>>>book1.authors.add(p) (添加author)
>>>book1.authors.remove(p)(删除author)
l 对Author操作
>>>p.book_set.add(book1)(添加book)
>>>p.book_set.create(name = ‘python book’) (添加book)
>>>books = Book.objects.all()
>>>p.book_set.remove(books[1])(删除book)
>>>books(books[1]仍显示)
>>>p.book_set.all()(books[1]被删除)
4 多对多表在web中显示
1) 编辑模板文件index.html
#mkdir blog/templates/index.html
#vim blog/templates/index.html
<html>
{% for author in authors %}
<div>
<h3>{{author.name}}</h3>
{% for book in author.book_set.all %}
<li>{{book.name}}</li>
{% endfor %}
</div>
{% endfor %}
</html>
2) 设置urls.py
3) 编辑blog/views.py
from django.shortcuts import render_to_response
from blog.models import Author,Book
def show_author(req):
authors = Author.objects.all()
return render_to_response('index.html', {'authors':authors})
def show_book(req):
books = Book.objects.all()
return render_to_response('index1.html', {'books':books})
4) 启动django内置服务器
#pyhton manage.py runserver

浙公网安备 33010602011771号