Django 模型

//创建App应用程序
python manage.py startapp books

//建立模型

代码

1 from django.db import models
2
3 # Create your models here.
4
5 class Publisher(models.Model):
6 name = models.CharField(max_length = 30 )
7 address = models.CharField(max_length = 50 )
8 city = models.CharField(max_length = 60 )
9 state_province = models.CharField(max_length = 30 )
10 country = models.CharField(max_length = 50 )
11 website = models.URLField()
12
13 class Author(models.Model):
14 first_name = models.CharField(max_length = 100 )
15 last_name = models.CharField(max_length = 40 )
16 email = models.EmailField()
17
18 class Book(models.Model):
19 title = models.CharField(max_length = 100 )
20 authors = models.ManyToManyField(Author)
21 publisher = models.ForeignKey(Publisher)
22 publication_date = models.DateField()

模型安装
修改 settings.py 配置信息

代码

70 MIDDLEWARE_CLASSES = (
71 # 'django.middleware.common.CommonMiddleware',
72 # 'django.contrib.sessions.middleware.SessionMiddleware',
73 # 'django.middleware.csrf.CsrfViewMiddleware',
74 # 'django.contrib.auth.middleware.AuthenticationMiddleware',
75 # 'django.contrib.messages.middleware.MessageMiddleware',
76 )
88 INSTALLED_APPS = (
89 # 'django.contrib.auth',
90 # 'django.contrib.contenttypes',
91 # 'django.contrib.sessions',
92 ' django.contrib.sites ' ,
93 # 'django.contrib.messages',
94 ' mysite.books ' ,
95 # Uncomment the next line to enable the admin:
96 # 'django.contrib.admin',
97 )

//验证模型的有效性

abeen@localhost: ~/ django_test / mysite$ python manage.py validate
0 errors found

//打印输出sql语句

代码

abeen@localhost: ~/ django_test / mysite$ python manage.py sqlall books
BEGIN;
CREATE TABLE `books_publisher` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar( 30 ) NOT NULL,
`address` varchar( 50 ) NOT NULL,
`city` varchar( 60 ) NOT NULL,
`state_province` varchar( 30 ) NOT NULL,
`country` varchar( 50 ) NOT NULL,
`website` varchar( 200 ) NOT NULL
);
CREATE TABLE `books_author` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first_name` varchar( 100 ) NOT NULL,
`last_name` varchar( 40 ) NOT NULL,
`email` varchar( 75 ) NOT NULL
);
CREATE TABLE `books_book_authors` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`book_id` integer NOT NULL,
`author_id` integer NOT NULL,
UNIQUE (`book_id`, `author_id`)
);
ALTER TABLE `books_book_authors` ADD CONSTRAINT `author_id_refs_id_9e7e386`
FOREIGN KEY (`author_id`) REFERENCES `books_author` (`
CREATE TABLE `books_book` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar( 100 ) NOT NULL,
`publisher_id` integer NOT NULL,
`publication_date` date NOT NULL
);
ALTER TABLE `books_book` ADD CONSTRAINT `publisher_id_refs_id_c5b274bb`
FOREIGN KEY (`publisher_id`) REFERENCES `books_publisher`
ALTER TABLE `books_book_authors` ADD CONSTRAINT `book_id_refs_id_cfbcf262`
FOREIGN KEY (`book_id`) REFERENCES `books_book` (`id`);
CREATE INDEX `books_book_22dd9c39` ON `books_book` (`publisher_id`);
COMMIT;

//同步模型到数据库

代码

abeen@localhost: ~/ django_test / mysite$ python manage.py syncdb
Creating table books_publisher
Creating table books_author
Creating table books_book_authors
Creating table books_book
Installing index for books.Book_authors model
Installing index for books.Book model
No fixtures found.

基本数据访问

代码

In [ 1 ]: from books.models import Publisher // 导入
// 创建对象
In [ 2 ]: p = Publisher(name = ' Apress ' ,address = ' 2855,Telegraph Avenue ' ,city = ' Berkeley ' ,
state_province = ' CA ' ,country = ' USA ' ,website = ' http://www.jinry.com ' )
// 存入数据库
In [ 3 ]: p.save()
In [ 4 ]: p2 = Publisher(name = ' Apress ' ,address = ' 2855,Telegraph Avenue ' ,city = ' Berkeley ' ,
state_province = ' CA ' ,country = ' USA ' ,website = ' http://www.jinry.com ' )
In [ 5 ]: p2.save()
// 取信息
In [ 6 ]: publisher_list = Publisher.objects.all()
In [ 7 ]: publisher_list
Out[ 7 ]: [ < Publisher: Publisher object > , < Publisher: Publisher object > ]
In [ 8 ]: type(publisher_list)
Out[ 8 ]: < class ' django.db.models.query.QuerySet ' >

// 创建并直接存入数据库
In [ 9 ]: p2 = Publisher.objects.create(name = ' Apress ' ,address = ' 2855,Telegraph Avenue ' ,
city = ' Berkeley ' ,state_province = ' CA ' ,country = ' USA ' ,website = ' http://www.jinry.com ' )

选择对象集

In [ 9 ]: publisher_list = Publisher.objects.all()//取全部
In [ 10 ]: publisher_list
Out[ 10 ]: [ < Publisher: abeen > , < Publisher: shanshan > , < Publisher: Apress > ]

数据过滤

代码

In [ 16 ]: publisher = Publisher.objects.filter(name = " abeen " )
In [ 17 ]: publisher
Out[ 17 ]: [ < Publisher: abeen > ]

//sql and

In [ 21 ]: publishers = Publisher.objects.filter(name = " abeen " , city = " hai dian " )

In [ 22 ]: publishers
Out[ 22 ]: [ < Publisher: abeen > ]
In [ 23 ]: publishers = Publisher.objects.filter(name__contains = " a " ) // 包含关系
In [ 25 ]: publishers
Out[ 25 ]: [ < Publisher: abeen > , < Publisher: shanshan > ]

获取单个对象

In [ 27 ]: p = Publisher.objects.get(name = " abeen " )
In [ 28 ]: p
Out[ 28 ]: < Publisher: abeen >

注意get在取不到结果或取到多个结果时,会报DoesNotExist错误,程序要自己处理。如:

代码

In [ 30 ]: try :
....: p = Publisher.objects.get(name = " abeen1 " )
....: except Publisher.DoesNotExist:
....: print " abeen1 is not in "
....: else :
....: p
....:
....:
abeen1 is not in

数据排序

数据排序

In [ 39 ]: Publisher.objects.all()
Out[ 39 ]: [ < Publisher: abeen > , < Publisher: shanshan > , < Publisher: Apress > ,
  < Publisher: binbin > , < Publisher: qiqi > , < Publisher: lanlan > ]
In [ 40 ]: Publisher.objects.order_by( " name " ) // 按name排序
Out[ 40 ]: [ < Publisher: abeen > , < Publisher: Apress > , < Publisher: binbin > ,
< Publisher: lanlan > , < Publisher: qiqi > , < Publisher: shanshan > ]
In [ 41 ]: Publisher.objects.order_by( " name " , " city " ) // 多字段排序
Out[ 41 ]: [ < Publisher: abeen > , < Publisher: Apress > , < Publisher: binbin > ,
< Publisher: lanlan > , < Publisher: qiqi > , < Publisher: shanshan > ]
In [ 42 ]: Publisher.objects.order_by( " -name " ) // 逆向排序,在前面加一个减号 - 前缀
Out[ 42 ]: [ < Publisher: shanshan > , < Publisher: qiqi > , < Publisher: lanlan > ,
< Publisher: binbin > , < Publisher: Apress > , < Publisher: abeen > ]

如果感觉每次查询都要写order_by啰嗦的话,可以用Meta来设置模型默认的排序字段

代码

5 class Publisher(models.Model):
6 name = models.CharField(max_length = 30 )
7 address = models.CharField(max_length = 50 )
8 city = models.CharField(max_length = 60 )
9 state_province = models.CharField(max_length = 30 )
10 country = models.CharField(max_length = 50 )
11 website = models.URLField()
12
13 def __unicode__ (self):
14 return self.name
15
16 class Meta:
17 ordering = [ ' name ' ]

查询看一下结果默认按name排序了

代码

In [ 1 ]: from books.models import Publisher
In [ 2 ]: P = Publisher
In [ 3 ]: P.objects.all()
Out[ 3 ]: [ < Publisher: abeen > , < Publisher: Apress > , < Publisher: binbin > ,
< Publisher: lanlan > , < Publisher: qiqi > , < Publisher: shanshan > ]

注意可以在任意一个模型类中使用 Meta 类,来设置一些与特定模型相关的选项。
(参考与特定模型相关选项 http://djangobook.py3k.cn/appendixB/

连锁查询

In [ 5 ]: p = Publisher.objects.filter(name__contains = " a " ).order_by( " name " )
In [ 6 ]: p
Out[ 6 ]: [ < Publisher: abeen > , < Publisher: lanlan > , < Publisher: shanshan > ]

限制返回的数据

代码

In [ 7 ]: Publisher.objects.all()[ 1 ] // 按索引号取
Out[ 7 ]: < Publisher: Apress >
In [ 8 ]: Publisher.objects.all()[0: 2 ] // 按范围取
Out[ 8 ]: [ < Publisher: abeen > , < Publisher: Apress > ]
In [ 9 ]: Publisher.objects.all().order_by( " -name " )[0: 2 ] // 不支持负索引,可以后逆排实现效果
Out[ 9 ]: [ < Publisher: shanshan > , < Publisher: qiqi > ]

更新多个对象

In [ 11 ]: p = Publisher.objects.get(name = " abeen " )
In [ 12 ]: p
Out[ 12 ]: < Publisher: abeen >
In [ 13 ]: p.name = " new abeen "
In [ 14 ]: p.save() // 将所有字段都更新,即使只修改某个字段

先看一下数据库数据

代码

mysql > select * from books_publisher;
+----+-----------+-----------------------+------------+----------------+---------+----------------------+
| id | name | address | city | state_province | country | website |
+----+-----------+-----------------------+------------+----------------+---------+----------------------+
| 1 | new abeen | 2855 ,Telegraph Avenue | hai dian | CA | USA | http: // www.jinry.com |
| 2 | shanshan | 2855 ,Telegraph Avenue | feng tai | CA | USA | http: // www.jinry.com |
| 3 | Apress | 2855 ,Telegraph Avenue | Berkeley | CA | USA | http: // www.jinry.com |
| 4 | binbin | | shou guang | | | |
| 5 | qiqi | | shou guang | | | |
| 6 | lanlan | | shou guang | | | |
+----+-----------+-----------------------+------------+----------------+---------+----------------------+
In [ 16 ]: Publisher.objects. filter (id = " 1 " ).update(name = " abeen " )
Out[ 16 ]: 1L
In [ 17 ]: Publisher.objects.all().update(website = " http://www.jinry.com " )
Out[ 17 ]: 6L

数据已修改

代码

mysql > select * from books_publisher;
+----+----------+-----------------------+------------+----------------+---------+----------------------+
| id | name | address | city | state_province | country | website |
+----+----------+-----------------------+------------+----------------+---------+----------------------+
| 1 | abeen | 2855 ,Telegraph Avenue | hai dian | CA | USA | http: // www.jinry.com |
| 2 | shanshan | 2855 ,Telegraph Avenue | feng tai | CA | USA | http: // www.jinry.com |
| 3 | Apress | 2855 ,Telegraph Avenue | Berkeley | CA | USA | http: // www.jinry.com |
| 4 | binbin | | shou guang | | | http: // www.jinry.com |
| 5 | qiqi | | shou guang | | | http: // www.jinry.com |
| 6 | lanlan | | shou guang | | | http: // www.jinry.com |
+----+----------+-----------------------+------------+----------------+---------+----------------------+

删除对象

In [ 18 ]: Publisher.objects. filter (name = " lanlan " ).delete()
In [ 19 ]: p = Publisher.objects.get(name = " binbin " )
In [ 20 ]: p.delete()

//删除表数据时要注意,显示调用all(),否则会出如下错误

代码

In [ 21 ]: Publisher.objects.delete()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/ home / abeen / django_test / mysite / <ipython console > in <module > ()
AttributeError: 'Manager' object has no attribute 'delete'

// 删除表内全部数据
In [ 22 ]: Publisher.objects.all().delete()

转载于:https://www.cnblogs.com/abeen/archive/2010/07/09/1774038.html

[Dynamic Language] Python Django: 模型使用相关推荐

  1. python Django 模型操作

    python Django 模型操作 1. 添加模型到数据库 2. objects:查找数据 3. all:查找所有数据 4. filter:数据过滤 5. get:获取单个对象 6. order_b ...

  2. [Python]Django模型(Model)

    前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...

  3. [Dynamic Language] Python File Operator

    Python File Operator 基本文件操作 In [1]: f = open('test.txt') In [2]: f.read() Out[2]: 'abeen....2010-10- ...

  4. [Dynamic Language] Python 静态方法、类方法、属性

    突然发现Python属性是比较有意思的,属性是继承的,先看下面代码: 38 class ABeen(object): 39 def f(self): 40 return "abeen&quo ...

  5. [Dynamic Language] Python os

    os模块中比较有用的部分 1. os.sep 可以取代操作系统特定的路径分割符.    2. os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix ...

  6. Python Django 模型类字段常用属性

  7. Python+django网页设计入门(19):创建新模型扩展自带用户表的字段

    公众号送书活动火热进行中:新学期福利,送18本Python图书 ================== 前导课程: Python+django网页设计入门(18):自定义模板过滤器 Python+dja ...

  8. 【Python】django模型models的外键关联使用

    [Python]django模型models的外键关联使用 Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-61830 ...

  9. type python django models_Django 模型

    Django 模型 Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django 为这些数据库提供了统一的调用API. 我们可以根据自 ...

最新文章

  1. Docker入门六部曲——服务
  2. Git常见疑难解答集锦
  3. mysql1033错误存储引擎_【Mysql问题集锦(1)】mysql不能使用innodb存储引擎
  4. [bzoj2213][Poi2011]Difference_动态规划
  5. ISATAP隧道技术及实践
  6. windows批处理使用记录
  7. 3COM小型办公室有线局域网方案
  8. 低至4.7折起!戴尔OptiPlex商用台式机限时特惠,重磅来袭!
  9. qaxwidget传递参数到html,记一次QT使用QAxWidget打开.html文件调用显示离线百度地图不能缩放,自定义图片不能显示解决方法...
  10. 为什么openstack要用rabbitmq这类消息中间件来进行RPC这类的操作呢,直接rpc不行吗?
  11. Mac电脑:Flutter开发环境配置小白教程
  12. 引用类型--Object类型、Array类型
  13. 什么是软件架构?常用的软件架构
  14. can和could的用法_can和could的区别和用法
  15. 指环王解析_回到指环王
  16. 高速学英语- 大脑的不同学习机制
  17. 如何使用Flutter封装即时通讯IM框架开发插件
  18. 排序(使用插入法对数组元素从小到大排序)
  19. ElasticSearch Docker 部署实例
  20. 机器学习中的数学——常用概率分布(九):经验分布(Empirical分布)

热门文章

  1. OpenSSH 下载与配置
  2. java中遍历HashMap的四种方法及效率比较
  3. 4月03日云栖精选夜读:阿里全资收购饿了么意味着啥?这篇分析说全了!
  4. python 写文件换行
  5. 我的“普鲁斯特问卷”
  6. 2023年软考什么时候考试?
  7. Linux笔记之浅析关闭防火墙和selinux
  8. 如何安装Python第三方库
  9. JavaScript touch 事件 touchstart touchmove touchend
  10. vue3+vite+typescript实现低代码表单编辑器