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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。