Django(三)
阿新 • • 發佈:2022-03-02
ORM的概念
1. 什麼是ORM? 關係對映物件 # 不但在python中有,在其他語言中也有 2. 特點: 在操作資料庫的時候,不用在寫原生SQL語句 '''相對而言,執行效率低了''' 3. ORM書寫的位置: 在models.py檔案中 4. 如何使用? 類名 >>> 表名 物件 >>> 記錄 屬性 >>> 欄位 5. 如何來建立表? # 建立一張表出來,必須繼承models class User(models.Model): # 組合索引,聯合索引 # id int primary key auto_increment id = models.IntegerField(primary_key=True) # username, max_length必須寫 username = models.CharField(max_length=32) # varchar(32) # password, orm支援自定義資料型別 password = models.CharField(max_length=32) # char() 6. 類寫完之後,一定要執行資料庫遷移命令,才能真正的創建出來資料表 ''' python36 manage.py makemigrations python36 manage.py migrate ''' # 凡是跟資料相關的操作都要執行以上兩句話 # 補充:ORM不能建立資料庫,必須提前把庫建立完成
欄位的增刪改查
''' 如果你的表有主鍵,並且主鍵名也叫id,那麼可以省略不寫,自動建立 如果你的主鍵名不叫id,那麼,就需要指定了 ''' # 建立一張表出來,必須繼承models class User(models.Model): # 組合索引,聯合索引 ''' 如果你的表有主鍵,並且主鍵名也叫id,那麼可以省略不寫,自動建立 如果你的主鍵名不叫id,那麼,就需要指定了 ''' # id int primary key auto_increment id = models.IntegerField(primary_key=True) # username, max_length必須寫 username = models.CharField(max_length=32) # varchar(32) # password, orm支援自定義資料型別 password = models.CharField(max_length=32) # char()
ORM資料的增刪改查
# 增加資料 # sql: insert into t1 ()... # ORM: # 第一種方式 # res=models.User.objects.create(username='ly', password=123) ''' 返回值是當前插入的資料物件 ''' # print(res.username) # 第二種方式: # obj=models.User(username='ly1', password=123) # obj.save() # 這句話才是真正的操作資料 # 修改:第一種方式 # sql:update db1 set username = '', password = '' where id=1 and ... # orm: # models.User.objects.filter(id=1).update(username='LY') # models.User.objects.filter(pk=1).update(username='LY') '''返回值是影響的行數''' # 第二種方式 # res = models.User.objects.filter(pk=1).all()[0] # filter裡面的條件是and關係 # res = models.User.objects.filter(pk=1, username='aaaa11').first() # [0] # res = models.User.objects.filter(pk=1).first() # [0] # res = models.User.objects.filter(username='aaaa').filter(password=123).all() # [0] '''只要返回值是QuerySet物件,那麼,就可以一直點queryset提供的方法''' # print(res) # <QuerySet [<User: User object>]> # print(res.username) # print(res.password) # res.username = 'aaaa' # res.save() # 刪除:delete from user where id = 1 models.User.objects.filter(pk=1).delete()
ORM建立表關係
# mysql是關係型資料庫
一對一:
'''外來鍵欄位建在任何一方都可以,但是,推薦建在使用頻率比較高的一張表'''
一對多
'''
外來鍵欄位建在多的一方
'''
多對多
'''
外來鍵欄位不建在任何一張表,而是,建在第三張表中
'''
eg:
圖書表
出版社表
作者表
作者詳情表
'''
圖書和出版社是一對多,圖書是多,出版社是一
圖書和作者是多對多的關係
作者和作者詳情表是一對一
'''
# 不常用的資料我們稱之為冷資料,
# 常用的資料我們稱之為熱資料
# ORM建立表關係
# 1. 先建立這張表的基礎欄位,
# 2. 在回頭建立外來鍵欄位
# 出版社表
class Book(models.Model):
title = models.CharField(max_length=32)
'''
float
double
decimal(5, 2) 999999.99
'''
# decimal(8, 2)
price = models.DecimalField(max_digits=8, decimal_places=2)
# publish_id = models.ForeignKey(to='Publish', to_field='id')
publish_id = models.ForeignKey(to='Publish') # 如果關聯的是id欄位,那麼可以省略不寫
# publish_id = models.ForeignKey(to=Publish) # 如果關聯的是id欄位,那麼可以省略不寫
authors = models.ManyToManyField(to='Author')
'''
authors是一個虛擬欄位,不會真正的在book表中創建出來這個欄位
這個欄位是關聯第三張表的
'''
class Publish(models.Model):
addr = models.CharField(max_length=32)
# 作者表
class Author(models.Model):
name = models.CharField(max_length=128)
author_detail = models.OneToOneField(to='AuthorDetail')
# 作者詳情表
class AuthorDetail(models.Model):
phone = models.CharField(max_length=32)