Django 連接MySQL及數據操做

Django 連接MySQL

Django建立的項目自帶的數據庫是SQLite3,咱們想要連接MySQL的話,須要更改settings.py中的配置python

1.在MySQL中建立好數據庫,Django項目不會建立數據庫只會根據models.py中的模型類建立對應的表mysql

2.在項目文件下的settings.py文件中,找到 DATABASES屬性,配置MySQL相關參數redis

DATABASES = {
    'default': {
        # 將數據庫引擎修改爲 mysql
        'ENGINE': 'django.db.backends.mysql',
        # 數據庫名稱
        'NAME': 'django_test',
        # 數據庫所在的主機地址
        'HOST': '127.0.0.1',
        # MySQL服務的端口號
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'Ad123',
        'CHARSET': 'utf8'
    }
}

3.找到項目文件下或app(應用程序)下的__init__.py 配置成MySQLsql

注意:重點!重點!重點!數據庫

import pymysql

# 將數據庫引擎調整爲MySQL
pymysql.install_as_MySQLdb()

4.在對應的app(應用程序)下的 models.py 文件中編寫數據庫表對應的類django

from django.db import models

# 模型類都須要繼承 models.Model 類
class Book(models.Model):
    # AutoField 表示是int數據類型,auto_increment自增加列,primary_key 表示主鍵 
    b_id = models.AutoField(primary_key=True)
    # CharField 表示varchar數據類型,必須給 max_length 賦值,表示字符長度
    book_name = models.CharField(max_length=64)
    # IntegerField 表示int數據類型, default 表示默認值
    book_price = models.IntegerField(default=0)

這裏運用的就是ORM對象關係映射app

ORM(Object Relational Mapping) 對象關係映射:經過使用描述對象和數據庫之間映射的方式,將面嚮對象語言程序中的對象自動持久化到關係數據庫中。code

本質上就是將數據從一種形式轉換到另一種形式,通俗來說,可以讓一個不會數據庫操做的小白也能經過Python面向對象語法,句點符(對象.屬性)來簡單快捷的操做數據對象

Python MySQL
類(class) 數據表(table)
對象(object) 記錄(數據表中的一行記錄)
屬性(attribute) 表字段(column)

5.在cmd或pycharm中的Terminal窗口執行數據庫遷移(同步)命令blog

注意:重點!重點!重點!

# python3 是python解釋器名稱
# 將對數據庫的操做記錄到項目中的migrations文件夾下的文件中,此時並無同步到到數據庫
python3 manage.py makemigrations
# 將對數據庫的操做同步到MySQL中
python3 manage.py migrate
  • 必定要在對應的項目文件下執行這兩條命令
  • 這兩條命令通常狀況下,是成對出現的,缺一不可
  • 在開發過程當中,只要修改了models.py 中跟數據庫相關的代碼,就必須從新執行這兩命令,以保證數據庫中的記錄跟models.py中一致


Django 表操做-增刪改

在models.py文件中操做

1.增長表,增長對應的類便可

2.給表增長字段或修改字段,找到對應的類,調整類屬性的參數便可,例

# 默認全部列都是非空,容許爲空,null=True
book_price = models.IntegerField(null=True)
# 默認全部列沒有默認值,增長默認值,default=默認值
press_addr = models.CharFiels(default='aaa')

3.刪除表,將對應的類註釋便可

以上操做,都要執行!!!處理完畢後,執行數據庫遷移(同步)命令


Django 數據操做-查增刪改

1.數據操做-查詢

  • models.類名.objects.filter() 條件查詢
# 當前類是Book類
# filter() 有返回值,是一個列表;沒有參數(查詢全部)或多個參數,參數之間關係對應SQL語句爲:where 參數1=參數值1 and 參數2=參數值2 and …… and 參數n=參數值n
# res = models.Book.objects.filter(book_name='鋼鐵是怎樣煉成的')
# select * from book where book_name='青年文摘' and book_price=1234;
res = models.Book.objects.filter(book_name='青年文摘', book_price=1234)
# 可經過索引取值可是索引不能爲負數,不推薦使用索引取值,可以使用first()
book_obj = res.first()  # 取第一條記錄

注意:filter方法若是沒有獲取到結果,不會報錯,返回的是一個空列表

  • models.類名.objects.all() 查詢全部
# 等同於 select * from book
# 返回值是一個列表,支持索引,但不支持負索引
res = models.Book.objects.all()

2.數據操做-增長

  • 類.objects.create()
# create() 有返回值,是當前被建立的對象自己
book_obj = Book.objects.create(book_name='Django入門', book_price=1234)
# 打印建立的對象, 對象的book_name 屬性
print(book_obj, book_obj.book_name)
  • 建立對象,經過對象.save()
# 建立Book 對象
book_obj = Book(book_name='redis入門', book_price=4321)
# 經過對象.save()方法增長記錄
book_obj.save()

3.數據操做-刪除

'''
1.先查詢出結果,
2.經過delete() 刪除
'''
# sql語句:delete from book where b_id=2;
models.Book.objects.filter(b_id=2).delete()
# 因爲filter() 的返回值是一個列表,這個方式至關因而批量刪除,不建議刪除記錄

4.數據操做-修改

  • 批量更新(推薦使用該方法)
'''
1.先查詢出結果
2.經過update() 更新
'''
# sql語句:update book set book_name='aa', book_price=2314 where b_id=3;
models.Book.objects.filter(b_id=3).update(book_name='aa',book_price=2314)
# 因爲filter() 的返回值是一個列表,這個方式至關因而批量修改
  • 先獲取數據對象,再修改對象屬性,調用對象的綁定方法save()保存(瞭解便可,不推薦使用)
# 1.獲取數據對象
book_obj = models.Book.objects.filter(b_id=3).first()
# 2.修改對象屬性
book_obj.book_name = 'bb'
book_obj.book_price = 3124
# 3.調用對象的綁定方法 save
book_obj.save()
相關文章
相關標籤/搜索