完美主义者的最终框架
创建工程:
django-admin startproject douban
创建应用:
在douban工程项目目录下输入:
python manage.py startapp book(你想建立的app名称)
建立一个叫book的app
这样,在你的工程项目douban目录下会出现一个叫book的目录
将我们新建的应用(book)添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book',)
在book目录下进入models.py输入类似下面的代码:
class Publisher(models.Model): 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.URLField() def __unicode__(self): #python3 def__str__(self) return self.name class Author(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() email = models.EmailField() def __unicode__(self): return self.name class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() def __unicode__(self): return self.title |
上面的每个class相当于一个新的table
django会自动给每个model配置一个名为id的primary key
在shell中输入
python manage.py makemigrations #建立了模型到表的映射关系
python manage.py migrate #生成表
之后你应该能看到诸如:
Creating tables...
Creating tablebooks_publisher
Creating tablebooks_author
Creating tablebooks_book_authors
Creating tablebooks_book
Installingcustom SQL ...
Installingindexes ...
Installed 0object(s) from 0 fixture(s)
这样的信息
使用Navicat可以直观看到生成的表
(插入一个新的对象) insert:
在python-shell下面操作可以直接操作
from book.modelsimport AuthorØ 方法1:p1 =Author(name='zhangsan',age=30,email='zhangsan@126.com')p1.save()Ø 方法2:p1 = Author()p1. name='zhangsan'p1.age =30p1.email='zhangsan@126.com'p1.save()Ø 方法3:Author.objects.create(name='zhangsan',age=30,email='zhangsan@126.com')Ø 方法4:Author.objects.get_or_create(name='zhangsan',age=30,email='zhangsan@126.com)第4种方法是防止重复很好的方法, 但是速度要相对慢些, 返回一个元组, 第一个为Author对象, 第二个为True或False,新建时返回的是True, 已经存在时返回False.
(查询或选择对象)select:
在python-shell下面操作可以直接操作
n 获取一个记录对象:Author.objects.get(name="zhangsan")注意:get返回的对象具有唯一性质,如果符合条件的对象有多个,则get报错!n 获取所有记录对象:Author.objects.all()n 获取满足某些条件的记录对象1)名字完全等于zhangsan:Author.objects.filter(name='zhangsan')Author.objects.filter(name__exact='zhangsan')2)名字对zhangsan大小写不敏感:Author.objects.filter(name__iexact='zhangsan')3)名字包含zhang:Author.objects.filter(name__contains="zhang")
(更新对象)update:
在python-shell下面操作可以直接操作
from book.modelsimport Author l 使用save()方法:p =Author.objects.get(name='Zhangsan')p.name = 'zhangsan'p.save()所有的列都被更新了!效率低! l 用update()方法才比较好:Author.objects.filter(name='Zhangsan').update(name='zhangsan') l 可以对多行同时进行更新:Author.objects.all().update(country='USA')update()方法会返回一个整型数值,表示受影响的记录条数
(删除对象)delete:
在python-shell下面操作可以直接操作
from book.modelsimport Author u 调用该对象的delete()方法即可:p = Author.objects.get(name="O'Reilly")p.delete()u 使用all()方法,所有数据将会被删除:Author.objects.all().delete()
睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032