數據庫的操作:
1.簡單的操作數據庫:
在調用數據庫mysql是,有的需要在project的app下__init__.py添加:
import pymysql
pymysql.install_as_MySQLdb()
在定義字段時,如果沒有指定null=True,默認情況下 null=False ,即非空
創建數據庫: class Book(models.Model): id = models.AutoField(primary_key=True) author = models.CharField(max_length=100,null=False) price = models.FloatField(default=0) 添加數據: 1.book = Book(name='西游記', author='吳承恩', price=100)
2.book_dic = {'name'='三國演義', 'author'='羅貫中','price'=100}
Book.object.create(**book_dic)
查詢數據:pk --> primary key 1.book = Book.objects.get(pk=2) 2.book = Book.objects.filter(name='三國演義') 刪除數據: book.delete() 修改數據: book.price = 200 在增刪改查操作中,最后需要保存,即 book.save()
2.模塊常用屬性
AutoField: 映射到數據庫是int類型,可以有自動增長的特性,一般不需要使用這個類型, 不指定主鍵,那么模型會自動的生成一個叫id的自動增長的主鍵 如果想指定一個其他名字的並且具有自動增長的主鍵,也可使用 BigButoField: 64位整形,自增長 BooleanField: 布爾值類型
在模塊層面接收的是True/False,在數據庫層面是tinyint類型
NullBooleanField:
可以為空的布爾值
CharField: (max_length):
在數據庫層面是varchar類型,在python層面就是普通的字符串,需要指定最大長度,即必須傳遞max_length參數值
EmailFiled:
郵箱,默認大小為254
可輸入其他字符串格式,主要用處在前端提交表單
FlotField:
浮點類型,映射到數據庫類型float
TextField:
映射到數據庫類型是longtext,用於文章類存儲
DateField:
日期類型,映射到數據庫是date類型
參數:
auto_now_add:是在第一次添加數據進去的時會自動獲取當前時間
auto_now:每次這個對象調用save方法的時候都會將當前時間更新
DateTimeField:
日期時間類型,不僅可以存儲日期,還可以存儲時間,映射到數據庫是datetime類型
可使用auto_now_add, auto_now參數
TimeField:
時間類型,在數據庫中time類型
3.外鍵和表的關系
表名的設置:
在創建表名時,Django默認是表名格式為 app名_表名 如果需要重定義表名,則重寫Meta模塊 class Classes(models.Model): id = models.AutoField(primary_key=True) class Meta: db_table = 'Classes'
兩張表的關聯操作
創建表
book/model.py
class Category(models.Model): name = models.CharField(max_length=100) class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() category = models.ForeignKey("Category",on_delete=models.CASCADE) #on_delete是設置兩張表的級別,CASCADE為級別關聯 (同app下的設置外鍵)
autor = models.ForeignKey("front.Front",on_delete=models.CASCADE,null=True) #對front下的Front表設置外鍵
創建另一個app下的表
front/model.py class Front(models.Model): username = models.CharField(max_length=100)
1.添加表數據
book/views.py
def index(request): article = Article(title='abc',content='111') category = Category(name='最新文章') category.save() article.category = category article.save() return HttpResponse("seccess")
添加數據后的
2.另一種添加表數據:
def one_to_many_view(request): category = Category.objects.first() article = Article(title='大神片', content='沒得看') article.author = Front.objects.first() category.articles.add(article,bulk=False) #bulk的作用在於:自動保存數據庫article,category return HttpResponse("success")
兩種方式的不同之處在於,第一種是通過article調用添加,第二種是category調用添加
對自身的外鍵引用
book/model.py
class Conment(models.Model): content = models.TextField() origin_comment = models.ForeignKey('self',on_delete=models.CASCADE) #或者:origin_comment = models.ForeignKey('Conment',on_delete=models.CASCADE)
4.一對多關系表操作:
在Django中,假設存在 A表,B表,其中A表被B表引用並設置外鍵 即:A:id、username B:id、concent、author_id(外鍵A中id) Django會在A模型中創建一個以B_set()的函數
實例操作:
model.py class Category(models.Model): name = models.CharField(max_length=100) class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField()
#可以修改article_set():category = models.ForeignKey("Category",on_delete=models.CASCADE,related_name='articles') category = models.ForeignKey("Category",on_delete=models.CASCADE) views.py: #獲取某個分類下所有的文章 def index(request): category = Category.objects.first() article = category.article_set.first() #article_set可以被修改 print(article.title) return HttpResponse("success")
結果:三國演義
表內容如下
Django的常用DRM查詢:
參考:https://blog.csdn.net/qq_34493908/article/details/81352784