要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查。本篇仅带领大家进行简单的建表、查询和删除,因为model的重要性所以后面几篇都会围绕ORM慢慢深入。
本篇导论:
一、ORM
映射关系:
表名<------->类名
字段<------->属性
表记录<------->类实例对象
二、创建表(建立模型)
1、创建表的代码写在项目下的models文件中
1)比如我们创建一个图书表,建立如下:
fromdjango.dbimportmodels#Createyourmodelshere.classBook(models.Model):nid=models.AutoField(primary_key=True)#AutoField有序整形IntegerField整形title=models.CharField(max_length=32)#CharField字符author=models.CharField(max_length=32)publishDate=models.DateField()#DateField日期类型price=models.DecimalField(max_digits=5,decimal_places=2)#DecimalField浮点型也可以用FloatField类名就是表名,属性就是字段。继承django提供给我们的用于做转换的models.Model才能将我们写的类转化为数据库
定义好模型之后,你需要告诉Django使用这些模型。你要做的就是修改配置文件。
2)字段常用参数
1)django默认使用的是sqlite3数据库,我们使用的是mysql数据库所以需要修改配置
原先配置(将这些配置注释掉)
DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':os.path.join(BASE_DIR,'db.sqlite3'),}}重新配置
DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'blog',#你的数据库名称数据库需要自己提前建好'USER':'root',#你的数据库用户名'PASSWORD':'',#你的数据库密码'HOST':'',#你的数据库主机,留空默认为localhost'PORT':'3306',#你的数据库端口}}3、创建表命令
1)同步更改数据库表或字段
老版本:pythonmanage.pysyncdbDjango1.7.1及以上的版本需要用以下命令pythonmanage.pymakemigrationspythonmanage.pymigrate2)运行pythonmanage.pymakemigrations后我们应用下的migrations文件夹里会自动生成一个文件,是将我们写的类进一步转化:
#-*-coding:utf-8-*-#GeneratedbyDjango1.11.6on2017-10-2503:30from__future__importunicode_literalsfromdjango.dbimportmigrations,modelsclassMigration(migrations.Migration):initial=Truedependencies=[]operations=[migrations.CreateModel(name='Book',fields=[('nid',models.AutoField(primary_key=True,serialize=False)),('title',models.CharField(max_length=32)),('author',models.CharField(max_length=32)),('publishDate',models.DateField()),('price',models.DecimalField(decimal_places=2,max_digits=5)),],),]3)运行pythonmanage.pymigrate后表就插入到我们的数据库中了
4)注意:
如果我们的python是3.x版本运行上面两条会报错
Nomodulenamed"MySQLdb"在3.x走数据库用的是pymysql模块所以我们需要告诉django用pymysql
在应用下的__init__.py文件里添加代码
importpymysqlpymysql.install_as_MySQLdb()运行后在数据库里查看:
会发现django给我们创建了很多表我们自己创建的Book表会被自动改名为应用名_book这样避免了我们在不同的应用中有相同的表,其他的表后面用到时会一一介绍。
三、查看表
1、先在视图函数view中将数据取出来
<1>all():查询所有结果<2>filter():查询所给筛选条件相匹配的对象2、在template模版中接收
{%forbook_objinbookList%}
四、删除
删除方法就是delete()。它运行时立即删除对象而不返回任何值。
比如我们给表中添加一个删除按钮来实现点击按钮后数据库每条记录的删除
1、template模版
urlpatterns=[url(r'^admin/',admin.site.urls),url(r'^index/',views.index),url(r'^del/(\d+)',views.delBook),]3、视图函数view实现删除
defdelBook(request,id):models.Book.objects.filter(nid=id).delete()returnredirect("/index/")