Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。

本节的最后有源代码,但建议初学者按照代码操作,有问题再下载源代码和自己的代码进行比较。

多动手,这是学习编程最好的方法!

1. 新建项目和应用

django-admin.py startproject learn_models # 新建一个项目

cd learn_models # 进入到该项目的文件夹

django-admin.py startapp people # 新建一个 people 应用(app)

补充:新建app也可以用 python manage.py startapp people, 需要指出的是,django-admin.py 是安装Django后多出的一个命令,并不是运行的当前目录下的django-admin.py(当前目录下也没有),但创建项目会生成一个 manage.py 文件。

那project和app什么关系呢?

一个项目一般包含多个应用,一个应用也可以用在多个项目中。

2. 添加应用

将我们新建的应用(people)添加到 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',

'people',

)

3. 修改models.py

我们打开 people/models.py 文件,修改其中的代码如下:

from django.db import models

class Person(models.Model):

name = models.CharField(max_length=30)

age = models.IntegerField()

我们新建了一个Person类,继承自models.Model, 一个人有姓名和年龄。

这里用到了两种Field,更多Field类型可以参考教程最后的链接。

4. 创建数据表

我们来同步一下数据库(我们使用默认的数据库 SQLite3,无需配置)

先 cd 进入 manage.py 所在的那个文件夹下,输入下面的命令

# Django 1.6.x 及以下

python manage.py syncdb

# Django 1.7 及以上的版本需要用以下命令

python manage.py makemigrations

python manage.py migrate

Django 1.6.x 以下版本 显示大概如下:

Django 1.7.x 以上版本的同学会看到

我们会看到,Django生成了一系列的表,也生成了我们新建的people_person这个表,那么如何使用这个表呢?

5. 使用 Django 提供的 QuerySet API

Django提供了丰富的API, 下面演示如何使用它。

$ python manage.py shell

>>> from people.models import Person

>>> Person.objects.create(name="WeizhongTu", age=24)

>>>

我们新建了一个用户WeizhongTu 那么如何从数据库是查询到它呢?

>>> Person.objects.get(name="WeizhongTu")

>>>

我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示,这里并没有显示出与WeizhongTu的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 people/models.py

name 和 age 等字段中不能有 __(双下划线,因为在Django QuerySet API中有特殊含义(用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等)

也不能有Python中的关键字,name 是合法的,student_name 也合法,但是student__name不合法,try, class, continue 也不合法,因为它是Python的关键字( import keyword; print(keyword.kwlist) 可以打出所有的关键字)

from django.db import models

class Person(models.Model):

name = models.CharField(max_length=30)

age = models.IntegerField()

def __unicode__(self):

# 在Python3中使用 def __str__(self):

return self.name

按 CTRL + C 退出当前的 Python shell, 重复上面的操作,我们就可以看到:

新建一个对象的方法有以下几种:

Person.objects.create(name=name,age=age)

p = Person(name="WZ", age=23)

p.save()

p = Person(name="TWZ")

p.age = 23

p.save()

Person.objects.get_or_create(name="WZT", age=23)

这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.

获取对象有以下方法:

Person.objects.all()

Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存

Person.objects.get(name=name)

get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter

Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人

Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件

Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人

Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写

Person.objects.filter(name__regex="^abc") # 正则表达式查询

Person.objects.filter(name__iregex="^abc") # 正则表达式不区分大小写

filter是找出满足条件的,当然也有排除符合某条件的

Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象

Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的

python爬虫与django_请问django和爬虫程序如何整合?相关推荐

  1. python接口开发django_用 Django 开发接口

    环境搭建 1.pip install django==2.2.0 一. django-admin startproject UITEST python manage.py startapp paltf ...

  2. python中运用django_【Django】在项目中使用python

    将博客代码提交到仓库的时候,也许不经意间会将你不想泄漏的信息(比如数据库url,密码,密钥,调试状态,电子邮件主机,允许的主机等等)暴露.所以我们需要考虑,将我们的信息保存在安全的地方(比如直接保存在 ...

  3. python爬虫库的功能_Python学习爬虫掌握的库资料大全和框架的选择的分析

    学Python,想必大家都是从爬虫开始的吧.毕竟网上类似的资源很丰富,开源项目也非常多. Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 当我们在浏览器中输入一个url后回车,后台会发生 ...

  4. python import request 不报错_爬虫学习路径整理及安装环境遇到的坑

    学习路径是我自己提炼和精选的,只适合我个人,因为虽然有技术基础但是我刚入门爬虫视野很窄不专业,为避免误导你们,你们最好参考知乎上大牛已经回答的好答案.我发这篇文章,目的是给自己看的.ps,专栏下每篇文 ...

  5. python分布式爬虫系统_三种分布式爬虫系统的架构方式

    分布式爬虫系统广泛应用于大型爬虫项目中,力求以最高的效率完成任务,这也是分布式爬虫系统的意义所在. 分布式系统的核心在于通信,介绍三种分布式爬虫系统的架构思路,都是围绕通信开始,也就是说有多少分布式系 ...

  6. python获取id标签对应数据_Python--Scrapy爬虫获取简书作者ID的全部文章列表数据

    最近Python大火,为了跟上时代,试着自学了下.Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 今天我们就试着用Scra ...

  7. 网站爬取工具_Python项目:结合Django和爬虫开发小说网站,免安装,无广告

    前言 很多喜欢看小说的小伙伴都是是两袖清风的学生党,沉迷小说,不能自拔.奈何囊中甚是羞涩,没有money去看正版小说,但是往往这些免费的小说网站或者小说软件,随之而来的是大量的广告. Python嘛, ...

  8. python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载

    python商品数据分析可视化系统(带爬虫)京东销售数据分析 一.开发技术 pycharm.MySQL数据库/sqlite3数据库.Python3.x版本.Django框架 二.功能 用户注册.登录. ...

  9. 超全的Python完全版电子书——从基础到爬虫、分析等高级应用,限时下载

    python3.11即将于下半年发布,新的版本速度提升2倍,以弥补与其他编程语言在速度上的缺陷.可以预见Python语言在未来的应用范围会越来越广. python学习方向建议: 如果你是本科及以下学历 ...

最新文章

  1. Spring Cloud第一篇:服务注册与发现Eureka
  2. 这所211大学,迎来80后女科学家任副校长
  3. Java8的Optional是不是鸡肋?
  4. 推动大数据和AI应用场景的落地,加速实现与产业融合。
  5. 角点检测:Harris角点及Shi-Tomasi角点检测
  6. ubuntu安装远程桌面连接工具
  7. 目标检测系列(七)——CornerNet:detecting objects as paired keypoints
  8. kotlin访问控制符可见性
  9. 还在买白酒?算法工程师们,量化投资了解一下
  10. Python科学库sklearn.numpy.scipy. matplotlib.pandas
  11. 数据结构笔记-----树
  12. c语言只中原子变量含义,c语言中的原子操作 - osc_bkg5rgl1的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 单例(Singleton)设计模式
  14. 使用Flash在线制作头像
  15. gnu grub修复_linux命令:grub 文件详解及grub修复,系统常见故障修复
  16. 什么是缺陷密度?计算的公式及示例
  17. linux ps结果解析,Linux笔记-ps -aux的结果解析
  18. KJ1570矿用人员定位系统,煤安认证更安全
  19. 论文整理Actively Mapping Industrial Structures with Information Gain-Based Planning on a Quadruped Robot
  20. cad2016中选择全图字体怎么操作_ps创意字体设计教程:ps怎么做海报漂亮字体

热门文章

  1. 系统分析师和系统架构设计师难度比较_系统架构设计师,马上开课了!
  2. php引号变量_下列PHP数据库insert语句中变量前后的点和双引号有什么作用?
  3. 传统蒙文字体_蒙古要改回使用传统回鹘蒙文,这是种什么文字,蒙古为什么要改回...
  4. 新版谷歌浏览器开启Flash支持
  5. 【Python爬虫学习笔记12】Ajax数据爬取简介
  6. C艹 指针和const的关系和注意事项(非常有意思)
  7. 返回表达式列表中最小值least(exp1,exp2,exp3,……,expn)
  8. 更新SQL Server实例所有数据库表统计信息
  9. mac地址漂移flapping的前因后果
  10. 适用响应式 Web UI 框架