Python笔记(六)- 模型及Django站点管理

  在这篇博文中,将介绍django与数据库方面的交互的知识。首先在网上下载Python For MySQL,然后进行安装。安装成功之后,在setting.py文件中进行装载,如下:

 1 DATABASES = {
 2     ‘default‘: {
 3         ‘ENGINE‘: ‘django.db.backends.mysql‘,
 4         ‘NAME‘: ‘database‘, #首先要在MySQL中建立一个数据库叫database
 5         ‘USER‘:‘root‘,  #你数据库的用户
 6         ‘PASSWORD‘:‘root‘,  #你数据库的密码
 7         ‘HOST‘:‘127.0.0.1‘,
 8         ‘PORT‘:‘3306‘
 9     }
10 }

  配置好之后,如果没有错的话,进入项目所在目录,在命令行中运行python manage.py shell来进行测试。如果输入下面这段代码没有显示什么错误信息,就证明你的数据库配置正确了。之后就能进行增删改查操作。

1 from django.db import connection
2 cursor = connection.cursor()

  下面假设你的数据库配置正确了。我们将演示如何进行增删改查操作。

  首先在app应用中添加模型,我这里添加了3个,分别如下:

 1 #encoding=utf-8
 2 from django.db import models
 3
 4 #建立模型,对应MySQL中的表
 5 # Create your models here.
 6
 7 class Publisher(models.Model):
 8     name = models.CharField(max_length = 30)    #字段名以及类型指定
 9     address = models.CharField(max_length = 50)
10     city = models.CharField(max_length = 50)
11     state_province = models.CharField(max_length = 50)
12     country = models.CharField(max_length = 50,blank=True)#blank=True表明字段可以为空
13     website = models.URLField(blank=True) #Python提供的特定URL形式
14
15     def __unicode__(self):  #相当于Java中的toString()
16         return u‘id=%d,name=%s‘%(self.id,self.name)
17
18     class Meta: #指定之后查出的结果集按照id的升序排列,使用ordering=[‘-id‘]则为降序.
19         ordering = [‘id‘]
20
21 class Author(models.Model):
22     first_name = models.CharField(max_length = 50)
23     last_name = models.CharField(max_length = 50)
24     email = models.EmailField() #Python提供的特定Email格式x
25
26     def __unicode__(self):
27         return u‘firstname=%s‘ %self.first_name
28
29     class Meta:
30         ordering = [‘id‘]
31
32 class Book(models.Model):
33     title = models.CharField(max_length = 50)
34     author = models.ManyToManyField(Author) #book和author为多对多
35     publisher = models.ForeignKey(Publisher)#外键
36     publication_date = models.DateField()   #Python提供的特定日期格式
37
38     def __unicode__(self):
39         return self.title
40
41     class Meta:
42         ordering = [‘id‘]

  上面的代码请参看其后注释,很容易理解。简历好模型之后(模型对应我们在数据库中表),我们在setting.py中的INSTALLED_APPS元组里对我们的项目进行注册。然后使用python manage.py syncdb命令创建数据库中的表。创建成功之后,在tests.py里面对数据库进行操作(不是一定要在这个文件里)。

  插入数据

  先看下面这段代码:

 1 #encoding=utf-8
 2 #Create your tests here.
 3 from Second.models import Publisher
 4 #插入对象
 5 p1 = Publisher(name=‘zhouxy‘,address=‘nenu-software‘,city=‘长春‘,state_province=‘CA‘,country=‘China‘,website=‘www.cnblogs.com/zhouxuanyu‘)
 6 p1.save();
 7 p2 = Publisher(name=‘zhouxuanyu‘,address=‘nenu-software‘,city=‘长春‘,state_province=‘CA‘,country=‘China‘,website=‘www.cnblogs.com/zxyyxzshine‘)
 8 p2.save();
 9 publisher_list = Publisher.objects.all();
10 print publisher_list

  在上面第5,7行创建两个对象p1,p2。然后我们分别调用它们的save()方法,将其插入数据库。9,10行打印出这两个对象的信息。打印的信息就是我们在model中定义Publisher的时候所定义的__unicode__函数返回的值。类似于Java中对象的toString()。下面是结果图:

  我们可以使用python manage.py sqlall Second命令来显示MySQL语法。(版面原因,我只截部分图)

  查询数据

1 #查询对象
2 print Publisher.objects.filter(name=‘zhouxy‘).order_by(‘id‘) #等同于在sql中使用where关键字,也可以在model中添加class Meta:
3 print Publisher.objects.filter(name=‘zhouxy‘,city=‘长春‘) #等同于在sql中使用where和and关键字
4 print Publisher.objects.filter(name__contains=‘zhouxy‘)[0:2] #sql缺省=操作符是精确匹配,字段__contains相当于sql中的like,切片操作符等同于sql中的offset..limit..
5 print Publisher.objects.get(name=‘zxyyxzshine‘,id=2) #获取单个对象

  对照注释,很容易理解。filter()等同于sql中的where关键字。order_by()等同于sql中的order by语句。如果在filter中添加一个以上的条件,那么就相当于在sql中在条件语句中使用and关键字将条件结合起来。

  更新数据

1 #更新对象
2 print Publisher.objects.filter(id=1).update(name="zxyyxzshine") #返回更新成功的row数
3 print Publisher.objects.filter(name=‘zhouxuanyu‘).update(name=‘zxyyxzshine‘)

  删除对象

1 #删除对象
2 print Publisher.objects.filter(id=1).delete()  
3 print Publisher.objects.all().delete()
时间: 2024-10-12 02:59:36

Python笔记(六)- 模型及Django站点管理的相关文章

6Python全站之路系列之Django站点管理

Python全栈之路系列之Django站点管理 站点管理也称之为后台,比如说博客的后台你可以发布文章,修改文章,修改频道等信息. Django使用极少的代码为你做了一切,在Django中创建管理界面已经不是问题,它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作. django.contrib包 Django自动管理工具是django.contrib的一部分.django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框

django站点管理

一.启动django站点管理功能 1.关于django.contrib包   包含了django自带的众多附加组件,主要包括:   1)管理工具: django.contrib.admin   2)用户鉴别系统:django.contrib.auth   3)支持匿名会话:django.contrib.sessions   4)用户评注系统:django.contrib.comments 2.settings.py中启动管理工具所需要的包 INSTALLED_APPS = ( 'django.c

python django 站点管理 配置mysql数据库

运行命令mysql -uroot -p进入mysql 新建一个数据库mydatabase 在/mysite/mysite目录下 编辑settings.py文件: 默认数据库为sqlite: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'mydatabase', } } mysql数据库配置: DATABASES = { 'default': { 'ENGINE': 'django.db.ba

Django站点管理——管理站点

参考文献: https://docs.djangoproject.com/zh-hans/2.0/ref/contrib/admin/ Django的admin站点 Django最强大的部分之一是自动管理界面. 它从您的模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容. 管理员的建议用途仅限于组织的内部管理工具. 它不是用于构建整个前端. 管理员有许多用于自定义的钩子,但要注意尝试专门使用这些钩子. 如果您需要提供一个更加以流程为中心的接口来抽象出数据库

62.django站点管理

1.站点简介 对于某一类网站,  管理界面 是基础设施中非常重要的一部分. 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容. 一些常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子. 站点特性:它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作. 1.1django.contrib包 技术层面上讲,它被称作dja

Python笔记(五)--Django中使用模板

使用Django开发网站时,如果不使用模板,那么将会很不合理.因为我们所有的html代码都需要被硬编码到我们的Python代码中.我们新建一个工程,然后再在新建一个应用程序,并在其中的views.py文件中添加如下代码: 1 #coding=UTF-8 2 from django.http.response import HttpResponse, Http404 3 import datetime 4 5 def hours_ahead(request,offset): 6 try: 7 of

python笔记六:进程与线程

1.进程 1)调用unix/linux系统中的进程函数fork(),用法和linux相同,调用成功返回0,失败返回-1: import os print 'Process (%s) start...' % os.getpid() pid = os.fork() if pid==0: print 'I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid()) else: print 'I (%s) just

python笔记六

1.修改excel 1 # python3 -m pip instatll xlutils #指定装到那个Python版本的(针对有多个Python) 2 import xlrd 3 from xlutils import copy 4 book = xlrd.open_workbook('students.xls') 5 #先用xlrd模块,打开一个excel 6 new_book = copy.copy(book) 7 #通过xlutils这个模块里面的copy方法,复制一份excel 8

Python笔记六(面向对象的三大特性)

类的三大特性:继承 多态 封装 1.什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. 为什么会有继承? 解决代码的冗余问题. python中类的继承分为:单继承和多继承 Parent类 —— 父类 基类 超类 Son类     —— 子类 派生类 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(Par