python django框架的模型的创建
2017-11-24 17:34
489 查看
最近在读djangobook,这也算是写的一篇笔记吧,模型这块的内容链接在这。http://djangobook.py3k.cn/2.0/chapter05/
为了方便对数据库进行操作,django中有模型(models)这个概念
也就是djangoMTV模型中M这一部分,关于数据的存取.
可以使用pip安装也可以使用tar包
然后在django的目录下修改settings.py
数据库这一部分修改成这个样子。
然后在命令行中输入以下代码测试数据库是否能够连接成功
需要注意的是这里要用python manage.py shell来启动命令行。
然后可以看到这个目录的结构为
在一个app中完全包括了MTV中的模型、模板和视图。
打开这个books目录下的models.py编写如下,定义两个类对象
有点类似于使用SQL语句定义一个表的结构,原文中给出的对比如下
使用如下命令来生成SQL语句
然后执行到数据库中
最后表的结构就写到了数据中。
输入以下代码
需要注意的是
只有调用了该对象的 save() 方法以后这些数据才保存到数据库中。
p1=Pubisher(…)
这段代码类似于SQL语句中insert into Publisher ….
在类中我们可以通过重写特殊方法来修改字符串的表现。具体不详细记录
编写def unicode()
一些对象基本的方法如下
对应的是SQL的UPDATE语句
对应的是SQL的SELECT * FROM …语句
但是在django中不会这样使用,只会把所有的列名写在SELECT之后。
对应的是SELECT语句使用时的WHERE字句,用于筛选和过滤数据。
需要注意的时filter方法中的参数增多后,会自动的起到SQL中AND子句的作用。
在name后面加了两个下划线和contains,是一个魔法方法,对应的是LIKE子句
获取某个对象
对应的是SQL语句中的ORDER BY子句
为了方便对数据库进行操作,django中有模型(models)这个概念
也就是djangoMTV模型中M这一部分,关于数据的存取.
数据库的配置
首先我们需要安装好数据库驱动,可以使用mysqlclient或者MySQl-python。可以使用pip安装也可以使用tar包
pip install mysqlclient #本人使用的mysqlclient
然后在django的目录下修改settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'test', 'USER': 'django', 'PASSWORD':'redhat', 'HOST':'127.0.0.1', 'PORT':'3306' } }
数据库这一部分修改成这个样子。
然后在命令行中输入以下代码测试数据库是否能够连接成功
>>> from django.db import connection >>> cursor = connection.cursor()
需要注意的是这里要用python manage.py shell来启动命令行。
创建app并且定义模型
在目录djangotest下的djangotest目录执行以下命令来生成一个apppython manage.py startapp books
然后可以看到这个目录的结构为
books/ __init__.py models.py tests.py views.py
在一个app中完全包括了MTV中的模型、模板和视图。
打开这个books目录下的models.py编写如下,定义两个类对象
from django.db import models 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() 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()
有点类似于使用SQL语句定义一个表的结构,原文中给出的对比如下
CREATE TABLE "books_publisher" ( "id" serial 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 );
模块的安装
回到上一级目录修改settings.py文件MIDDLEWARE_CLASSES = ( # 'django.middleware.common.CommonMiddleware', # 'django.contrib.sessions.middleware.SessionMiddleware', # 'django.contrib.auth.middleware.AuthenticationMiddleware', ) INSTALLED_APPS = ( # 'django.contrib.auth', # 'django.contrib.contenttypes', # 'django.contrib.sessions', # 'django.contrib.sites', 'djangotest.books', )
使用如下命令来生成SQL语句
python manage.py makemigrations books
然后执行到数据库中
python manage.py migrate
最后表的结构就写到了数据中。
数据的一些操作方法
使用python manage.py shell启动命令行输入以下代码
In [1]: from pangjingzeshabi.books.models import Publish ...: er In [2]: p1 = Publisher(name='Apress', address='2855 Tele ...: graph Avenue', ...: ... city='Berkeley', state_province='CA', co ...: untry='U.S.A.', ...: ... website='http://www.apress.com/') In [3]: p1.save() In [4]: p2 = Publisher(name="O'Reilly", address='10 Fawc ...: ett St.', ...: ... city='Cambridge', state_province='MA', c ...: ountry='U.S.A.', ...: ... website='http://www.oreilly.com/') In [5]: p2.save() In [6]: publisher_list = Publisher.objects.all() In [7]: publisher_list Out[7]: <QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>, <Publisher: Publisher object>, <Publisher: Publisher object>]>
需要注意的是
只有调用了该对象的 save() 方法以后这些数据才保存到数据库中。
p1=Pubisher(…)
这段代码类似于SQL语句中insert into Publisher ….
在类中我们可以通过重写特殊方法来修改字符串的表现。具体不详细记录
编写def unicode()
一些对象基本的方法如下
In [1]: p.name = 'Apress Publishing' In [2]: p.save()
对应的是SQL的UPDATE语句
In [8]: Publisher.objects.all() Out[8]: <QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>, <Publisher: Publisher object>, <Publisher: Publisher object>]>
对应的是SQL的SELECT * FROM …语句
但是在django中不会这样使用,只会把所有的列名写在SELECT之后。
In [9]: Publisher.objects.filter(name='Apress') Out[9]: <QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>]>
对应的是SELECT语句使用时的WHERE字句,用于筛选和过滤数据。
需要注意的时filter方法中的参数增多后,会自动的起到SQL中AND子句的作用。
In [10]: Publisher.objects.filter(name__contains="press ...: ") Out[10]: <QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>]>
在name后面加了两个下划线和contains,是一个魔法方法,对应的是LIKE子句
WHERE name LIKE '%press%';
In [11]: Publisher.objects.get(name="press ...: ") Out[11]: <QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>]>
获取某个对象
Publisher.objects.orderby("name")
对应的是SQL语句中的ORDER BY子句
相关文章推荐
- 详解在Python的Django框架中创建模板库的方法
- django框架创建Python项目CRUDp的步骤
- Python创建第一个Django框架的Web项目
- 在Python的Django框架中创建和使用模版
- Python Django框架根据模型不能新建表
- Python3之Django Web框架模型篇(一)
- 在Python的Django框架中创建语言文件
- Python Django框架项目的创建和启动
- python下的web开发框架-Django,建立模型
- python下的web开发框架-Django,创建项目
- Python的Django框架完成一个完整的论坛(3.创建app的models.py、views.py源码)
- 详解在Python的Django框架中创建模板库的方法
- Python3之Django Web框架模型篇(二)
- 在Python的Django框架中创建语言文件
- Window下Django为什么无法直接创建项目 - Python解惑之Django框架
- python开发学习-day15(前端部分知识、web框架、Django创建项目)
- 在Python的Django框架中创建和使用模版
- Python框架Django -- 02 模型
- Python的Django框架中自定义模版标签的示例
- Python之Flask和Django框架解决跨域问题,配合附加ajax和fetch等js代码