1. 程式人生 > >Django models ORM基礎操作--白話聊Django系列

Django models ORM基礎操作--白話聊Django系列

integer auth 簡單 支持 install sta 項目 模塊 數據同步

技術分享

  上次我們講完了views視圖,那我們這次來看一下Django強大的ORM,可以這麽說,你不懂Django的ORM,你就不懂Django,那廢話不多說  

  ORM又稱關系對象映射,在ORM裏,一張表就是一個類,一行數據就是類的一個對象

  在Django中遵循code first的原則,即:根據代碼中定義的類來自動生成數據庫表

  利用ORM來實現定義表,以及對表進行操作

  註意:在連接數據庫上,Django默認是連接MySQLdb的,但是在python3中,不是很完美的支持這個模塊,所以創建的Django項目時,如果python版本為3時,則要在項目名下的init文件裏加入下面的代碼,如果運行過程中,報錯no module named MySQLdb,那就是這個原因了

import pymysql
pymysql.install_as_MySQLdb()

  另外,Django裏的連接方式默認為連接sqllite,如果想切換成其他的連接方式,比如連接MySQL,只需要在配置文件裏settings,註釋之前的,重新配置新的即可

#默認數據庫連接
# DATABASES = {
#     ‘default‘: {
#         ‘ENGINE‘: ‘django.db.backends.sqlite3‘,
#         ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
#     }
# }

#重新配置數據庫連接
DATABASES = {
    ‘default‘: {
        #MySQL的數據庫引擎
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘:‘django_com‘,
        ‘USER‘:‘root‘,
        ‘PASSWORD‘:‘‘,

    }
}

  註意:NAME數據庫的名字,在mysql連接前,該數據庫必須已經創建,而上面的sqlite數據庫下的db.sqlite則是在創建項目時自動創建的

  pycharm也支持表格顯示數據庫數據

  為了能更好的查看數據同步,我們可以直接用pycharm查看的,跳過第三方數據庫操作軟件Navicate,只需要在pycharm安裝相應的數據庫驅動即可,具體做法如下:

  右側欄-->Database--> + -->Data Source-->選擇數據庫驅動

技術分享

  點擊download後,設置後數據名和用戶名和密碼,點擊apply和ok,就可以了,直接可以在pycharm點擊查看數據庫表,如果你用的是sqlite數據庫就更簡單了,直接將sqlite拖動到Database就可以了

  前奏說多了,接下來我看看怎麽用ORM實現對數據的增刪改查

  首先我們必須創建表,那就要定義表類了,並且繼承某個類,在Django中的要繼承的類是models.Model

class UserInfo(models.Model):
    name = models.CharField(max_length=24)
    age = models.IntegerField()
    sex = models.BooleanField(max_length=1,choices=((0,‘男‘),(1,‘女‘),))
    email = models.EmailField()
    home_adr = models.CharField(max_length=56)

    def __str__(self):
        return self.name

  Django提供很多的字段,這些字段輔助form表單驗證

  接下來的是操作數據

  增:create 和 對象.save

def create_data1(**kwargs):
    ret = models.Author.objects.create(**kwargs)

def create_data2(**kwargs):
    ob = models.Author(**kwargs)
    ob.save()

  刪:delete

def delete_data(**kwargs):
    models.Author.objects.filter(**kwargs).delete()

  改:update

def update_data(**kwargs):
    models.Author.objects.filter(**kwargs).update(name=‘laoliu‘)

  查:all first get filter values

#取所有
def find_data_all(**kwargs):
    r = models.UserInfo.objects.all()
    return r

#取某一個,獲取不到報錯
def find_data_one(**kwargs):
    r = models.UserInfo.objects.get(**kwargs)
    return r

#取第一個
def find_data_first(**kwargs):
    r = models.UserInfo.objects.first()
    return r

#篩選條件查,多個對象
def find_data_filter(**kwargs):
    r = models.UserInfo.objects.filter(**kwargs)
    return r

#篩選字段查,多個對象
def find_data_value(*args):
    r = models.UserInfo.objects.values(*args)
    return r

Django models ORM基礎操作--白話聊Django系列