插入两个数据后,讲道理Publisher.objects.all()方法会取出Publisher类的对象,但是却没有得到有用信息;
直接删除:>>> Publisher.objects.filter(country='USA').delete() #删除所有country='USA'的
web应用中,主观逻辑(视图处理)经常牵涉与数据库的交互。数据库驱动网站在后台连接数据库,从中取数据,然后甩漂亮界面展现在web端。许多复杂的网站都提供以上两种功能的结合(如Amazon.com),而Python天生具备简单强大的数据库查询执行方法,很适合开发这类数据库驱动网站。
保存数据:>>> p2.save() #他会update此id全部字段,不只是name字段;也有轻量级更改的方法。
1、数据查看、过滤操作:
[<Publisher: Apress>] #逗号转换成了 and
vim ~/HelloWorld/mysql_django/models.py
class Publisher(models.Model):
def __unicode__(self):
return self.name
** class Meta:
** ordering = ['name'] #Meta类,默认会以name字段进行排序
3、连锁查询:
T:表现层,处理与表现相关的决定,比如页面如何显示;
启动shell界面:python manage.py shell
>>> from django.db import connection
那我们能不能像上节那样创建模板,其实django提供了更简单直接的方式:数据库API
vim ~/HelloWorld/mysql_django/models.py from django.db import models class Publisher(models.Model): #CREATE TABLE "books_publisher"("id" serial NOT NULL PRIMARY KEY, name = models.CharField(max_length=30) #"name" varchar(30) NOT NULL, address = models.CharField(max_length=50) #"address" varchar(50) NOT NULL, city = models.CharField(max_length=60) #"city" varchar(60) NOT NULL, state_province = models.CharField(max_length=30) #"state_province" varchar(30) NOT NULL, country = models.CharField(max_length=50) #"country" varchar(50) NOT NULL, website = models.URLField() #"website" varchar(200) NOT NULL ); class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField()代码解读:
>>> Publisher.objects.order_by('name')[0] #[0]=limit 1;不支持负索引[-1],但可用降序[0]实现2、每个模型相当于数据库表,每个属性即字段,类型(CharField)相当于字段类型(varchar)
MySQL mysqlpython manage.py check
删除全部:>>> Publisher.objects.all().delete() #不加all()方法删除不了
[<Publisher: O'Reilly>, <Publisher: Apress>] #-号,表示逆向排序1、首先每个数据模型都是django.db.models.Model的子类,父类Model包含所有与数据库交互的必要方法;
python manage.py sqlmigrate mysql_django 0001
添加数据:>>> p3 = ....name='Apress' ...
============================================================================================
Django 设计遵循松耦合原则,修改某部分不影响其他部分。视图函数中通过了模板系统将业务逻辑和表现逻辑分隔,数据库层也应如此。
vim ~/HelloWorld/mysql_django/models.py from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) ...................... website = models.URLField() ** def __unicode__(self): ** return self.name class Author(models.Model): ......................... ** def __unicode__(self): ** return u'%s %s' % (self.first_name, self.last_name)** class Book(models.Model): ......................... ** def __unicode__(self): ** return self.title============================================================================================
4、定义了出版商、作者、书籍的一些内容。
PostgreSQL postgresql_psycopg2python manage.py migrate
第 一 个 app
>>> Publisher.objects.get(name="Apress")
2、数据排序操作:
a、检查语法错误(django1.9.0版本以下用 python manage.py validate)
MVC 架构模式:即数据存取逻辑(model)、表现逻辑(view)、业务逻辑(controller)的组合
数据库 DATABASE_ENGINE 适配器================================================================================================
from django.shortcuts import render_to_response import MySQLdb def book_list(request): db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost') cursor = db.cursor() cursor.execute('SELECT name FROM books ORDER BY name') names = [row[0] for row in cursor.fetchall()] db.close() return render_to_response('book_list.html', {'names': names})弊端:此方法虽可用,但是我们将参数配置直接硬编码到视图函数,显然犯了前两节相同的错误;如果我们改一个参数、改一种数据库、换个执行语句等等,都会引起大范围的改动。
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2 建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站