Django數據庫操作


數據庫的操作:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM