1. 程式人生 > 其它 >3.django orm對欄位以及資料的增刪改查

3.django orm對欄位以及資料的增刪改查

1. 什麼是ORM?
	物件關係對映Object Relational Mapping , orm不但在python中有,其他語言中也有
    
2. 特點:
	# 在操作資料庫的時候,不需要寫原生SQL語句了。
    select * from table # 
    
3. 我們的模型類需要寫在應用下的models.py檔案中
    
4. 如何使用?
	'''在使用orm的時候,必須先建立好庫'''
類			   >>>			   表
物件			  >>>			  表裡面的資料
物件點屬性		>>>				欄位對應的值
# 缺陷:sql封裝死了 有時候查詢速度很慢

5. 如何建立一張表?
'''在寫ORM的時候,類一定要繼承models.Model'''
class User(models.Model):
    id = models.AutoField(primary_key=True)  # id int primary key auto_increment
    name = models.CharField(max_length=32)  # name varchar(32),CharField必須指定max_length引數
    age = models.IntegerField()  # age int
# 可以加一個verbose_name引數,給每一個欄位做解釋
'''寫完之後資料庫是沒有反應的,一定要執行資料庫遷移命令'''

6. 一定要執行遷移資料庫
	# 執行下面兩行程式碼來生成資料表
    '''
    	python3 manage.py makemigrations  # 只是生成遷移記錄
    	python3 manage.py migrate         # 真正的生成資料
    '''
# 只要動了models.py中跟資料庫相關的程式碼就必須重新執行上述兩條命令

'''
針對主鍵欄位:
        如果你以後在建立表的時候,主鍵就叫id名,那麼可以省略不寫,orm會自動幫你創建出主鍵名稱為id的欄位
        但是,如果你的主鍵名不叫id,比如叫cid,nid...那麼,就不能省略了,就要手動寫。
'''

ORM對欄位的增刪改查

# 增加欄位:
pwd = models.IntegerField('密碼',null=True)  # 該欄位可以為空
is_delete = models.IntegerField(default=0)  # 預設值

# 修改欄位:
直接改程式碼然後執行資料庫遷移命令即可
    
# 刪除欄位:直接註釋就是刪除(不要輕易在這個裡註釋程式碼)
註釋掉程式碼然後執行資料庫遷移命令即可 

    軟刪除:
	is_delete = models.BooleanField(default=0) 
	'''
		預設值設定為0,代表當前資料有效,沒有刪除;如果刪除資料了,把這個值設定為1,代表刪除了
	'''

資料的增刪改查

# 1.查詢資料
# select * from user where name=username;
user_obj = models.User.objects.filter(name=username).first()  # <QuerySet [<User: User object>]> 列表套使用者物件

# 2.新增資料
#insert into user(name,pwd) values(username,password);
models.User.objects.create(name=username,pwd=password)

# 3.查詢所有的資料
# select * from user;
user_data = models.User.objects.all()  # <QuerySet [<User: User object>, <User: User object>]>

# 4.修改資料
models.User.objects.filter(id=edit_id).update(name=username,pwd=password)
edit_obj.name = username
edit_obj.pwd = password
edit_obj.save() 

# 5.刪除資料
models.User.objects.filter(id=delete_id).delete()

模板語法傳值

user_data = models.User.objects.all()
第一種方式:
    return render(request, 'home.html', {'aaa': user_data})
第二種方式:
	return render(request, 'home.html', locals())