一,Django ORM与原生SQL对比

ORM:    优点:    1.简单,不用自己SQL语句    2.开发效率高  缺点:    1.记忆你这个特殊的语法    2.相对于大神的SQL语句,肯定执行效率有差距  


二、ORM的对应关系

ORM的对应关系:类--->数据表对象--->数据行属性--->字段


三、ORM能做的事儿

ORM能做的事儿:1.操作数据表--->创建表、删除表、修改表2.操作数据行--->数据的增、删、改、查注意事项:不能创建数据库、自己动手创建数据库四、自己动手手动创建数据库

1. 修改django项目中settings.py中数据库连接类型:

createdatabasedbs11;


2.在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)

#数据库相关配置DATABASES={'default':{#连接的数据库类型'ENGINE':'django.db.backends.mysql',#连接数据库的地址'HOST':'127.0.0.1',#数据库端口'PORT':3306,#连接数据库的名称'NAME':"dbs11",#连接数据库的用户名'USER':'root',#连接数据库的密码'PASSWORD':'123456'}}


3.告诉Django用pymysql代替默认的MySQLDB连接MySQL数据库

在项目目录中__init__.py文件中导入MySQL连接配置文件

importpymysql#告诉Django用pymysql来代替默认的MySQLdbpymysql.install_as_MySQLdb()


4.在项目如(app)下面的models.py文件中定义一个类,这个类必须继承models.Model

fromdjango.dbimportmodels#ORM相关的只能写在这个文件里,写到别的文件里Django找不到##例如:classUserInfo(models,Model):id=models.AutoField(primary_key=True)#创建一个自增的主键字段name=models.CharField(null=False,max_length=16)#创建一个varchar类型的字段不能为空


5.执行两个命令

python3manage.pymakemigrationspython3manage.pymigrate


说明:以上为通过ORM创建数据库,如果是删除或者修改只需要在models.py文件中删除相关字段然后执行第5步的两个命令即可删除字段。修改同样只需要修改models.py文件然后执行第5步的两个命令即可。


五、通过ORM操作数据库

ORM查询

示例:ORM查询所有用户

#orm查询语法:models.表名.objects.all()#查询所有###ret=models.UserInfo.objects.all()print(ret[0].id,ret[0].name)

在django项目中应用操作:

后端执行方法:

fromdjango.shortcutsimportHttpResponse,render,redirectfromappimportmodelsdefuser_list(request):#去数据库中查询所有的用户#利用ORM这个工具去查询数据库,不用自己去查询ret=models.UserInfo.objects.all()#打开user_list.html文件,returnrender(request,"user_list.html",{"user_list":ret})

前端HTML

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>用户列表页</title></head><body><ahref="/add_user/">添加用户</a><tableborder="1"><thead><tr><th>id值</th><th>用户名</th></tr></thead><tbody>{%foruserinuser_list%}<tr><td>{{user.id}}</td><td>{{user.name}}</td></tr>{%endfor%}</tbody></table></body></html>

路由urls.py配置:

fromappimportviews#导入项目urlpatterns=[url(r'^user_list/',views.user_list)#定义对应路径关系]


ORM添加

#orm添加语法:models.表名.objects.create(name=new_name)#ORM添加

示例:ORM添加用户

models.UserInfo.objects.create(name=new_name)

路由urls.py配置:

fromappimportviews#导入项目urlpatterns=[url(r'^user_list/',views.user_list),#定义对应路径关系url(r'^user_add/',views.user_add),]

后端执行方法:

defuser_add(request):ifrequest.method=="POST":#用户填写新的用户名,并发送POST请求new_name=request.POST.get('username',None)#去数据库中创建一条用户记录models.UserInfo.objects.create(name=new_name)##添加成功后返回展示网页returnredirect("/user_list/")#第一个请求页面的时候,就返回一个页面,页面上有两个框让用户填写returnrender(request,"add_user.html")

前端执行的方法:

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>添加用户</title></head><body><formaction="/add_user/"method="post"><p>用户名:<inputtype="text"name="username"></p><p><inputtype="submit"value="提交"></p></form></body></html>


ORM与原生SQL查询

#原生SQL#查询所有select* fromuser;##ORM语法:models.user.objects.all()###ORM条件语句查询#filter条件(SQL:where)models.user.objects.filter(id=1)#条件大于##SQL:SELECT*fromuserwhereid>1andpassword='123'#ORMgtemodels.user.objects.filter(id__gt=1,password='123')#条件like语法##ORMmodels.user.objects.filter(password__startswith='a')#以a开头.这里对大小写敏感,而SQLlike不敏感models.user.objects.fileter(username__icontains='a')#对大写不敏感的,即a,A都匹配#SQLin语句对比ORM语句select...whereidin(1,2,3,4);models.user.objects.filter(id__in=[1,2,3,4])##ORM查询日期models.user.objects.filter(register_date_month=5)models.user.objects.filter(register_date_month=5)[0].register_date#对比SQL语句select...whereextract('month'frompub_date)='12';##ORM批量创建用户#有100个创建对象objs=[models.user(title='name{}'.format(i))foriinrange(100)]models.user.objects.bulk_create(onjs,10)#这里是10个一提交,即每次创建10个用户