中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django--ORM入門到精通

發布時間:2020-06-03 22:13:09 來源:網絡 閱讀:1904 作者:John966 欄目:編程語言


一,Django ORM 與原生SQL對比

ORM:  
  優點:
    1.簡單,不用自己SQL語句
    2.開發效率高
  缺點:
    1.記憶你這個特殊的語法
    2. 相對于大神的SQL語句,肯定執行效率有差距
  


二、ORM的對應關系

ORM的對應關系:
    類        --->    數據表
    對象      --->    數據行
    屬性      --->    字段


三、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查詢所有用戶

#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個用戶


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜南县| 城口县| 宁陵县| 两当县| 许昌市| 申扎县| 定安县| 溧水县| 高邑县| 邻水| 昆明市| 积石山| 水富县| 浦城县| 报价| 沈阳市| 吴川市| 蒙山县| 龙江县| 岗巴县| 石首市| 仪陇县| 旬阳县| 沛县| 宝应县| 界首市| 定远县| 洞头县| 平陆县| 策勒县| 瑞丽市| 方城县| 阿尔山市| 顺义区| 湄潭县| 蒲江县| 德兴市| 晋州市| 双牌县| 宝坻区| 定远县|