Django 框架模型操作入门教程
本文实例讲述了Django框架模型操作。分享给大家供大家参考,具体如下:
Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django为这些数据库提供了统一的调用API。我们可以根据自己业务需求选择不同的数据库。
MySQL是Web应用中最常用的数据库。本章以mysql为例。
如果没安装mysql驱动,可以执行以下命令安装:
sudopip3installmysqlclient
在项目的settings.py文件中找到DATABASES配置项,将其信息修改为:
djangoPro/djangoPro/settings.py:文件代码:
DATABASES={ 'default':{ 'ENGINE':'django.db.backends.mysql',#或者使用mysql.connector.django 'NAME':'test',#使用的数据库 'USER':'test',#用户名 'PASSWORD':'test123',#密码没有可以为空 'HOST':'localhost', 'PORT':'3306', } }
这里添加了中文注释,所以需要在HelloWorld/settings.py文件头部添加#-*-coding:UTF-8-*-。
上面包含数据库名称和用户的信息,它们与MySQL中对应数据库和用户的设置相同。Django根据这一设置,与MySQL中相应的数据库和用户连接起来。
创建APP
Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个TestModel的app:
django-adminstartappTestModel
目录结构如下:
djangoPro
|--TestModel
| |--__init__.py
| |--admin.py
| |--models.py
| |--tests.py
| `--views.py
修改TestModel/models.py文件,代码如下:
#models.py fromdjango.dbimportmodels classTest(models.Model): name=models.CharField(max_length=20)
以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime),max_length参数限定长度。
接下来在settings.py中找到INSTALLED_APPS这一项,如下:
INSTALLED_APPS=( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel',#添加此项 )
在命令行中运行:
$python3manage.pymigrate#创建表结构 $python3manage.pymakemigrationsTestModel#让Django知道我们在我们的模型有一些变更 $python3manage.pymigrateTestModel#创建表结构
表名组成结构为:应用名_类名(如:TestModel_test)。
注意:尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键。
数据库操作
接下来我们在HelloWorld目录中添加testdb.py文件(下面介绍),并修改urls.py:
fromdjango.conf.urlsimport* from.importview,testdb urlpatterns=[ url(r'^hello$',view.hello), url(r'^testdb$',testdb.testdb), ]
添加数据
添加数据需要先创建对象,然后再执行save函数,相当于SQL中的INSERT:
#-*-coding:utf-8-*- fromdjango.httpimportHttpResponse fromTestModel.modelsimportTest #数据库操作 deftestdb(request): test1=Test(name='runoob') test1.save() returnHttpResponse("数据添加成功!
")
获取数据
Django提供了多种方式来获取数据库的内容,如下代码所示:
djangopro/djangoPro/testdb.py:文件代码:
#-*-coding:utf-8-*- fromdjango.httpimportHttpResponse fromTestModel.modelsimportTest #数据库操作 deftestdb(request): #初始化 response="" response1="" #通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT*FROM list=Test.objects.all() #filter相当于SQL中的WHERE,可设置条件过滤结果 response2=Test.objects.filter(id=1) #获取单个对象 response3=Test.objects.get(id=1) #限制返回的数据相当于SQL中的OFFSET0LIMIT2; Test.objects.order_by('name')[0:2] #数据排序 Test.objects.order_by("id") #上面的方法可以连锁使用 Test.objects.filter(name="runoob").order_by("id") #输出所有数据 forvarinlist: response1+=var.name+"" response=response1 returnHttpResponse(""+response+"
")
更新数据
修改数据可以使用save()或update():
djangopro/djangoPro/testdb.py:文件代码:
#-*-coding:utf-8-*- fromdjango.httpimportHttpResponse fromTestModel.modelsimportTest #数据库操作 deftestdb(request): #修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE test1=Test.objects.get(id=1) test1.name='Google' test1.save() #另外一种方式 #Test.objects.filter(id=1).update(name='Google') #修改所有的列 #Test.objects.all().update(name='Google') returnHttpResponse("修改成功
")
删除数据
删除数据库中的对象只需调用该对象的delete()方法即可:
djangopro/djangoPro/testdb.py:文件代码:
#-*-coding:utf-8-*- fromdjango.httpimportHttpResponse fromTestModel.modelsimportTest #数据库操作 deftestdb(request): #删除id=1的数据 test1=Test.objects.get(id=1) test1.delete() #另外一种方式 #Test.objects.filter(id=1).delete() #删除所有数据 #Test.objects.all().delete() returnHttpResponse("删除成功
")
希望本文所述对大家基于Django框架的Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。