1. 程式人生 > 其它 >Django之ORM

Django之ORM

什麼是ORM

  ORM全稱是:Object Relational Mapping(物件關係對映),其主要作用是在程式設計中,把面向物件的概念跟資料庫中表的概念對應起來。舉例來說就是,我定義一個物件,那就對應著一張表,這個物件的例項,就對應著表中的一條記錄。

  在操作資料庫時,不用再寫SQL語句就能操作資料庫。

使用ORM建立表的操作

  在應用的models.py裡操作

# 建立表
class User(models.Model):
# 建立欄位
# id = models.AutoField(primary_key=True, verbose_name='主鍵')
username = models.CharField(primary_key=True, max_length=32, verbose_name='使用者名稱')
password = models.IntegerField(verbose_name='密碼')
# gender = models.CharField(max_length=32, verbose_name='性別')
# hobby = models.CharField(max_length=32, default='red', verbose_name='愛好')
# age = models.IntegerField(null=True,verbose_name='年齡')

PS: 如果你的主鍵名時id時,可以不寫,django會自動幫你建立一個主鍵名為id的欄位,並且自增,字串欄位的max_length必須寫,否則會報錯,verbose_name是該欄位的註釋。

  程式碼寫好之後,在命令列中輸入 python3 manage.py makemigrations 這是建立遷移記錄

                 python3 manage.py migrate 這一步才是建立表

  也可以在 tools =》 RUN manage.py TASK中輸入命令,在這裡面前綴可以不加,直接寫後面的程式碼即可,pycharm還會有提示功能

使用ORM對錶的增刪改查

  和建立表一樣,直接再models.py中操作,增加欄位就使用上面的操作,修改表直接修改表裡的程式碼即可,刪除將程式碼註釋掉即可

  注意!對資料庫進行操作之後,想要儲存修改後的表必須在命令列中輸入python3 manage.py makemigrations和python3 manage.py migrate

  只有輸入了這兩個命令,表的操作才會被修改。

使用ORM對資料的增刪改查

  增

# 第一種方式
# models.表名.object.create(欄位名1=資料1,欄位名2=資料2)
res=models.User.objects.create(username='jack
', password=123) ''' 返回值是當前插入的資料物件 ''' # 第二種方式 res=models.USER(username='jack',password=123) res.save()

  查

# 查詢所有資料,返回一個列表,列表裡可以看作是一個個物件,可以使用索引取得物件
res=models.User.object.filter().all.()
res=models.User.object.filter()

# 查詢欄位名username='jack'的資料列表
res=models.User.object.filter(username='jack')

# 獲得欄位名為id=1的資料物件
#方式1
obj=models.User.object.filter(id=1).first()
#方式2
obj=models.User.object.filter(id=1)[0]

  改

# 查詢資料庫中欄位名username為jack的資料,將該行的資料改成username改成jerry,password改成123
res = models.User.objects.filter(username='jack').update(username=jerry, password=123)

#該返回值是資料庫影響的行數

  刪

# 查詢資料庫中欄位名username為jack的資料,將改行資料刪除
models.User.objects.filter(username=jack).delete()

ORM建立表關係

  一對多(在多的表中書寫)

# 關聯欄位名 = models.ForeignKey(to='另一張表的關聯欄位名')
publish_id = models.ForeignKey(to='Publish') # 如果關聯的是id欄位,那麼可以省略不寫

  一對一(在任意一張表中書寫即可)

# 關聯欄位名 = models.OneToOneField(to='被關聯欄位名')
author_detail = models.OneToOneField(to='AuthorDetail')

  多對多

# 關聯欄位名 = models.ManyToManyField(to='被關聯欄位名')
 authors = models.ManyToManyField(to='Author')