最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年11月15日 12:03:56   作者:x_smile  
這篇文章主要給大家介紹了關(guān)于Django中ORM表的創(chuàng)建和增刪改查等基本操作的方法,還給大家分享了django orm常用查詢篩選的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

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

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

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

django-admin startproject orm_test

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

python manage.py runserver

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

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

django-admin startapp cmdb

此時(shí)基本準(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ù)庫(kù),但django中默認(rèn)為sqlite3。仍然在setting.py中找到 DATABASES ,對(duì)內(nèi)容進(jìn)行修改:

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

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

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

 import pymysql
 pymysql.install_as_MySQLdb()

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

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

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


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

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

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

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

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

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

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

from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.

from cmdb import models
def 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')

啟動(dòng)項(xiàng)目后,瀏覽器訪問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%',但是對(duì)于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é)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

武定县| 东兴市| 湘西| 固始县| 新晃| 迭部县| 唐海县| 乌兰浩特市| 萝北县| 祁门县| 桦甸市| 综艺| 宣武区| 安阳市| 莲花县| 肇州县| 垣曲县| 安岳县| 上犹县| 铁岭县| 喀什市| 乌鲁木齐县| 鄂伦春自治旗| 东兰县| 青田县| 珲春市| 奎屯市| 冷水江市| 集贤县| 泸溪县| 陵川县| 铜梁县| 淮北市| 甘泉县| 江山市| 华阴市| 讷河市| 梁河县| 金坛市| 田林县| 固安县|