ORM:
优点:
1.简单,不用自己SQL语句
2.开发效率高
缺点:
1.记忆你这个特殊的语法
2. 相对于大神的SQL语句,肯定执行效率有差距
ORM的对应关系:
类 ---> 数据表
对象 ---> 数据行
属性 ---> 字段
ORM能做的事儿:
1.操作数据表 ---> 创建表、删除表、修改表
2.操作数据行 ---> 数据的增、删、改、查
注意事项:不能创建数据库、自己动手创建数据库
1. 修改django项目中settings.py 中数据库连接类型:
create database dbs11;
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连接配置文件
import pymysql
#告诉Django用pymysql来代替默认的MySQLdb
pymysql.install_as_MySQLdb()
4.在项目如(app)下面的models.py 文件中定义一个类,这个类必须继承models.Model
from django.db import models
#ORM相关的只能写在这个文件里,写到别的文件里Django找不到
##例如:
class UserInfo(models,Model):
id = models.AutoField(primary_key=True) #创建一个自增的主键字段
name = models.CharField(null=False,max_length=16) #创建一个varchar类型的字段不能为空
5.执行两个命令
python3 manage.py makemigrations python3 manage.py migrate
说明:以上为通过ORM创建数据库,如果是删除或者修改只需要在models.py文件中删除相关字段然后执行第5步的两个命令即可删除字段。修改同样只需要修改models.py文件然后执行第5步的两个命令即可。
ORM查询
示例:ORM查询所有用户
#orm查询语法:models.表名.objects.all() #查询所有
###
ret = models.UserInfo.objects.all()
print(ret[0].id,ret[0].name)
在django项目中应用操作:
后端执行方法:
from django.shortcuts import HttpResponse, render, redirect
from app import models
def user_list(request):
#去数据库中查询所有的用户
#利用ORM这个工具去查询数据库,不用自己去查询
ret = models.UserInfo.objects.all()
# 打开user_list.html文件,
return render(request, "user_list.html", {"user_list": ret})
前端HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户列表页</title>
</head>
<body>
<a href="/add_user/">添加用户</a>
<table border="1">
<thead>
<tr>
<th>id值</th>
<th>用户名</th>
</tr>
</thead>
<tbody>
{% for user in user_list %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
路由urls.py配置:
from app import views #导入项目
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配置:
from app import views #导入项目
urlpatterns = [
url(r'^user_list/',views.user_list), #定义对应路径关系
url(r'^user_add/',views.user_add),
]
后端执行方法:
def user_add(request):
if request.method == "POST":
#用户填写新的用户名,并发送POST请求
new_name = request.POST.get('username',None)
#去数据库中创建一条用户记录
models.UserInfo.objects.create(name=new_name)
##添加成功后返回展示网页
return redirect("/user_list/")
#第一个请求页面的时候,就返回一个页面,页面上有两个框让用户填写
return render(request,"add_user.html")
前端执行的方法:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<form action="/add_user/" method="post">
<p>用户名:
<input type="text" name="username">
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
</body>
</html>
ORM与原生SQL查询
#原生SQL
#查询所有
select * from user;
##ORM语法:
models.user.objects.all()
###ORM条件语句查询
#filter条件(SQL:where)
models.user.objects.filter(id=1)
#条件大于
##SQL: SELECT * from user where id>1 and password='123'
#ORM gte
models.user.objects.filter(id__gt=1,password='123')
#条件 like语法
##ORM
models.user.objects.filter(password__startswith='a') #以a开头 .这里对大小写敏感,而SQL like不敏感
models.user.objects.fileter(username__icontains='a') #对大写不敏感的,即a,A都匹配
#SQL in 语句对比ORM语句
select ... where id in(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 ... where extract('month' from pub_date) = '12';
##ORM批量创建用户
#有100个创建对象
objs = [models.user(title='name{}'.format(i)) for i in range(100)]
models.user.objects.bulk_create(onjs,10) #这里是10个一提交,即每次创建10个用户
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。