国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django中ORM表的創(chuàng)建和增刪改查方法示例

2020-01-04 16:22:42
字體:
供稿:網(wǎng)友

前言

Django作為重量級的Python web框架,在做項目時肯定少不了與數(shù)據(jù)庫打交道,編程人員對數(shù)據(jù)庫的語法簡單的還行,但過多的數(shù)據(jù)庫語句不是編程人員的重點對象。因此用ORM來操作數(shù)據(jù)庫相當(dāng)快捷。今天來介紹一下用ORM操作數(shù)據(jù)庫。

一、創(chuàng)建Django項目

可以使用pycharme專業(yè)版直接快速創(chuàng)建。如果不是專業(yè)版也可以使用命令進(jìn)行創(chuàng)建。下面列出命令行創(chuàng)建方式:

django-admin startproject orm_test

這時會在當(dāng)前目錄創(chuàng)建文件夾名為orm_test,接下來進(jìn)入orm_test文件夾中,執(zhí)行命令:

python manage.py runserver

就啟動了該項目,默認(rèn)瀏覽器訪問127.0.0.1:8000就可以看到項目運行成功的提示。

接下來我們用命令在項目中創(chuàng)建一個應(yīng)用:

django-admin startapp cmdb

此時基本準(zhǔn)備就做好了。

二、修改配置文件

把我們的應(yīng)用即cmdb添加到 setting.py 的 INSTALLED_APPS 中:

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'cmdb', #我們創(chuàng)建的應(yīng)用]

另外我們基本用的是mysql數(shù)據(jù)庫,但django中默認(rèn)為sqlite3。仍然在setting.py中找到 DATABASES ,對內(nèi)容進(jìn)行修改:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm_test', #數(shù)據(jù)庫名稱 'USER':'root', #用戶 'PASSWORD':'123456', #密碼 'HOST':'localhost', #IP地址,本地測試為localhost 'PORT':'3306', #端口號 }}

里面的“NAME”的值是你數(shù)據(jù)庫中已有的數(shù)據(jù)庫名稱,接下里在此數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。

在python3 中,連接數(shù)據(jù)庫的是pymysql,因此在項目同名文件夾下的__init__.py 中加入以下代碼才能正常運行。

 import pymysql pymysql.install_as_MySQLdb()

三、寫模板文件來創(chuàng)建表結(jié)構(gòu)

在應(yīng)用(cmdb)的 models.py 中開始寫表結(jié)構(gòu),我們要做的就是寫一個類,類中的屬性為表中的列,ORM將類轉(zhuǎn)換為sql語句。簡單的寫一個下面的類,包含用戶名和密碼兩列。

from django.db import models# Create your models here.class users(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_length=64)

四、生成數(shù)據(jù)表

在終端中輸入命令行 python manage.py makemigrations ,這時會在應(yīng)用(cmdb)下的migrations文件夾下出現(xiàn)一個_initial.py 的文件,它記錄著生成數(shù)據(jù)表結(jié)構(gòu)的一些數(shù)據(jù)的臨時文件,接著在命令行中輸入  python manage.py migrate,由剛才的臨時文件生成數(shù)據(jù)表。我們在數(shù)據(jù)庫中查看生成的數(shù)據(jù)表,可以看到django生成的不僅僅是剛創(chuàng)建的一個表,而是十多個表,除自己的一張表,剩余為django內(nèi)部使用(包含有緩存,cookie,session等,畢竟這么厲害的框架為你做到你想不到的是應(yīng)該的)。在終端中查看一下表結(jié)構(gòu):show create table cmdb_users;

django,orm,增刪改查,django中的orm

看到的不僅有兩個自定的屬性列,多出一個id列,并且是自增的還是主鍵。

五、路由映射關(guān)系

在同名項目文件夾下的urls.py 中導(dǎo)入應(yīng)用(cmdb),寫映射關(guān)系到cmdb的views.py

from django.conf.urls import urlfrom django.contrib import adminfrom cmdb import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login),]

六、視圖及數(shù)據(jù)表的增刪改查

在路由映射到應(yīng)用(cmdb)下的views.py 中,右映射中寫對應(yīng)的函數(shù),也就是login函數(shù)。用于顯示的觀察項目的運行,我們在此函數(shù)中就先簡單得的打印到屏幕上一句“Hello World”。

在login函數(shù)中寫入增刪改查的語句。

from django.shortcuts import renderfrom django.shortcuts import HttpResponse# Create your views here.from cmdb import modelsdef login(request): #增加 # models.users.objects.create(username='xsmile',password=12345) # models.users.objects.create(username='sofia',password=12345) # models.users.objects.create(username='jerry',password=12345) #查看 # result=models.users.objects.all() #查看所有 # 條件查詢,結(jié)果為querySet類型,所以循環(huán)取出結(jié)果 # result=models.users.objects.filter(username='sofia') # for row in result: # print(row.id,row.username,row.password) #更改 # models.users.objects.filter(id=2).update(username='eric')  #刪除 #models.users.objects.filter(username='sofia').delete() return HttpResponse('Hello World')

啟動項目后,瀏覽器訪問127.0.0.1:8000/login 就可看到屏幕上的Hello World,表示相關(guān)的數(shù)據(jù)操作已成功修改數(shù)據(jù)表。
相關(guān)操作后數(shù)據(jù)表內(nèi)容的變化如下:

#插入一條數(shù)據(jù)后mysql> select * from cmdb_users;+----+----------+----------+| id | username | password |+----+----------+----------+| 1 | xsmile | 12345 |+----+----------+----------+1 row in set (0.00 sec)#再插入三條數(shù)據(jù)后mysql> select * from cmdb_users;+----+----------+----------+| id | username | password |+----+----------+----------+| 1 | xsmile | 12345 || 2 | xsmile | 12345 || 3 | sofia | 12345 || 4 | jerry | 12345 |+----+----------+----------+4 rows in set (0.00 sec)#修改數(shù)據(jù)后mysql> select * from cmdb_users;+----+----------+----------+| id | username | password |+----+----------+----------+| 1 | xsmile | 12345 || 2 | eric | 12345 || 3 | sofia | 12345 || 4 | jerry | 12345 |+----+----------+----------+4 rows in set (0.00 sec)#刪除數(shù)據(jù)后mysql> select * from cmdb_users;+----+----------+----------+| id | username | password |+----+----------+----------+| 1 | xsmile | 12345 || 2 | eric | 12345 || 4 | jerry | 12345 |+----+----------+----------+3 rows in set (0.00 sec)

七、django orm 常用查詢篩選

先列舉一下django orm中的常用查詢的篩選方法:

  • 大于、大于等于
  • 小于、小于等于
  • in
  • like
  • is null / is not null
  • 不等于/不包含于

model:

class User(AbstractBaseUser, PermissionsMixin): uuid = ShortUUIDField(unique=True) username = models.CharField(max_length=100, db_index=True, unique=True, default='') schoolid = models.CharField(max_length=100, null=True, blank=True, default='') classid = models.CharField(max_length=100, null=True, blank=True, default='') fullname = models.CharField(max_length=50, default='', null=True, blank=True) email = models.EmailField(_('email address'), blank=True, null=True) age = models.SmallIntegerField(default=0)

大于、大于等于

__gt 大于__gte 大于等于User.objects.filter(age__gt=10) // 查詢年齡大于10歲的用戶User.objects.filter(age__gte=10) // 查詢年齡大于等于10歲的用戶

小于、小于等于

__lt 小于__lte 小于等于User.objects.filter(age__lt=10)  // 查詢年齡小于10歲的用戶User.objects.filter(age__lte=10) // 查詢年齡小于等于10歲的用戶

in

__in查詢年齡在某一范圍的用戶User.objects.filter(age__in=[10, 20, 30])

like

__exact    精確等于 like 'aaa'__iexact    精確等于 忽略大小寫 ilike 'aaa'__contains   包含 like '%aaa%'__icontains  包含 忽略大小寫 ilike '%aaa%',但是對于sqlite來說,contains的作用效果等同于icontains。

is null / is not null

__isnull 判空User.objects.filter(username__isnull=True)  // 查詢用戶名為空的用戶User.objects.filter(username__isnull=False) // 查詢用戶名不為空的用戶

不等于/不包含于

User.objects.filter().excute(age=10)  // 查詢年齡不為10的用戶User.objects.filter().excute(age__in=[10, 20]) // 查詢年齡不為在 [10, 20] 的用戶

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建德市| 彰化县| 迁西县| 米易县| 丹寨县| 东源县| 财经| 翼城县| 龙川县| 芷江| 南召县| 永济市| 炉霍县| 东乡县| 甘德县| 镇远县| 湘阴县| 甘孜县| 扶余县| 崇仁县| 依兰县| 饶河县| 利辛县| 沅陵县| 金湖县| 潍坊市| 兴文县| 泉州市| 建瓯市| 苏尼特左旗| 璧山县| 锦屏县| 安远县| 辽中县| 临泽县| 凌云县| 柞水县| 盐源县| 鹰潭市| 长沙县| 乐陵市|