Django學習小記-ORM操做概要1

其實許多web框架都是用的pymysql來鏈接控制數據庫,但Django還提供了ORM的數據庫操做辦法(本質也是pymysql);兩種方式皆可,但咱們有必要去學一下ORMjavascript

  • 再也不關注用的是mysqloracle...等.
  • 經過簡單的配置就能夠輕鬆更換數據庫, 而不須要修改代碼.

ORM操做:html

  http請求:java

    url -> 視圖(模板+數據)python

  ORM操做表:mysql

    建立表、修改表、刪除表web

  操做數據行:sql

    增刪改查數據庫

  ORM利用pymysql等第三方工具鏈接數據庫django

  默認sqlitesession

  默認:mysql -> MYSQLDB(修改django默認鏈接mysql的方式

 

 

默認setting文件這樣設置的:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }

咱們須要修改爲以下配置:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } }

# 以下設置放置的與project同名的配置的 __init__.py文件中

# 因爲Django內部鏈接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,因此須要使用pymysql來代替

import pymysql pymysql.install_as_MySQLdb()

要是出現這個bug這樣修復-->  django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3

總結準備步驟就是:

  1. 建立數據庫
  2. 修改setting文件
  3. 修改__init__.py文件引入pymysql

 接下來建立一個類,讓類給我們生成表:

在app01文件夾裏的models.py修改:

from django.db import models #建立表、列(id\nid...
class UserInfo(models.Model): nid = models.BigAutoField(primary_key=True) #這行不寫Django默認會自動建立id而且是自增主鍵,因此之後能夠不用寫這行了! username = models.CharField(max_length=32) password = models.CharField(max_length=64)

那如何讓class給咱建立表呢?..再去setting裏註冊上app01:

# Application definition
 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01' ]
View Code

最後就要放大招:生成表!這兩命令記在骨髓裏!!!

#要是你app裏沒有migrations文件先要生成下! #python manage.py makemigrations --empty app01
 python manage.py makemigrations python manage.py migrate

看它一一會兒除了咱們本身的表還有不少表,這些表其實與Django自帶的那個後臺有關:

 此時,migrations文件夾下就生成相應配置文件,輕易不要刪除哦~

假如之後你想在class裏修改表名,請直接修改,再執行一次「骨髓命令」就行!有數據也不要緊!

假如之後你想在加一列age = models.IntegeField(),直接加就行,可是....

若原表中有數據了,只要指定age = models.IntegeField(null=True)或者age = models.IntegeField(default=xxx)

若建立一對多等關係就例如 ug = models.ForeignKey("UserGroup",null=True)    #生成是外鍵 ug_id

數據庫相關操做:增刪改查

#test可刪
def test(requst): from app01 import models #新增
    models.UserInfo.objects.create(username='shannon',password='111111') #查找
    #userinfo QuerySet類型(列表)[obj,obj,obj]
    userinfo = models.UserInfo.objects.all() for row in userinfo: print(row.nid,row.username) #加條件的查找filter()
    # ,是and ; id__gt=1 是id大於1;id__lt=1 是id小於1
    userinfo = models.UserInfo.objects.filter(nid=2,username='shannon') #刪除,刪前得先找到~
    models.UserInfo.objects.filter(nid=1).delete() #更新
    models.UserInfo.objects.filter(nid=4).update(password='123') return HttpResponse('成功')

 ORM連表操做

《models.py》
from
django db import models class UserType(models Model): #用戶類型 title= models.CharField(max length=32) class UserInfo(models. Model): #用戶表 name= models.CharField(max length=16) age= models.IntegerFieldo ut= models.ForeignKey(UserType)
------------------------------------------------
#獲取
#QuerySet[obj,obj,obj] 是列表類型
result =models.UserInfo objects.all()
for obj in resylt:
  print(obj.name,obj.age,obj.ut_id,obj.ut.title)
  #其實Django幫你作了連表


QuerySet[obj,obj,obj] 是列表類型

#UserInfo, ut是FK字段 - 正向操做 (一個用戶只有一個用戶類型)

#UserInfo ,表名小寫_set.all() - 反向操做 (一個用戶類型下能夠有不少用戶)

 

【Django】 讓models 裏面的內容正序或倒序顯示?

問題描述
在進行django開發過程當中,對app的內容進行更新,發現更新的內容顯示在文末,沒有顯示在開頭,指望全部的內容根據更新時間倒序顯示

解決方法
問題很好解決,咱們只須要在models裏面添加以下代碼:

class Gally(models.Model): title = models.CharField(max_length=50, verbose_name='標題') create_time = models.DateTimeField(default=timezone.now, verbose_name='建立時間') class Meta: ordering = ('-create_time',)

 便可實現經過create_time 倒序排列,固然你也能夠

ordering = ('-id',) 也就是最新的顯示在最前面。

若是要正序,也很簡單,去掉create_time 的 ‘-’ 符號就能夠了
————————————————
固然,還有一種簡單的方法:直接在查詢後面加order_by

user_list = models.UserInfo.objects.all().order_by('id') #倒序:
user_list = models.UserInfo.objects.all().order_by('-id') #多個排序條件,先左後右原則
user_list = models.UserInfo.objects.all().order_by('id','name')

 

 

ethtool

相關文章
相關標籤/搜索