DJango知識-模型類

?一.項目創建

  1. 在想要將項目創鍵的目錄下,輸入cmd? ?(進入命令提示符)
  2. 在cmd中輸入:Django-admin startproject 項目名稱? (創建項目)
  3. cd 項目名稱? (進入項目)
  4. Django-admin startapp 程序名稱? (創建程序)
  5. python manage.py runserver 8080? (運行程序)
  6. 將彈出的網址復制到瀏覽器中http://127.0.0.1:8080/?

當出現這個界面時說明運行成功了

二.設置settings

一.installed_apps

在INSTALLED_APPS中將我們創建的myday程序名稱輸入

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','myday'
]

二.templates

在根目錄下創建templates文件夾,并將TEMPLATES中的'DIRS'修改為如圖所示

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

三.databases

在DATABASES中按如下格式輸入,將數據庫改為MYSQL數據庫

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': '數據庫名','USER': 'root','PASSWORD': 'MYSQL密碼','HOST': '127.0.0.1','PORT': '3306',        }
}

?注意:因為在python3中mysql改名為pymysql所以需要在主目錄下的_init_中輸入

import pymysql
pymysql.install_as_MySQLdb()

四.漢化

最后這樣進行漢化處理

LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/shanghai'

三.模型類設置

1.字段類型

  1. AutoField:自動增長的IntegerField,通常不用指定,不指定時Django會自動創建屬性名為id的自動增長屬性
  2. BooleanField:布爾字段,值為True或False
  3. NullBooleanField:支持Null、True、False三種值
  4. CharField(max_length=字符長度):字符串,必選 參數max_length表示最大字符個數
  5. TextField:大文本字段,一般超過4000個字符時使用
  6. IntegerField:整數
  7. DecimalField(max_digits=None, decimal_places=None):十進制浮點數參數max_digits表示總位數,參數decimal_places表示小數位數
  8. FloatField:浮點數
  9. DateField[auto_now=False, auto_now_add=False]):日期 參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為false,參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用于創建的時間戳,它總是使用當前日期,默認為false,參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤
  10. TimeField:時間,參數同DateField
  11. DateTimeField:日期時間,參數同DateField
  12. FileField:上傳文件字段
  13. ImageField:繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片

關系型數據庫的關系包括三種類型:

  • ForeignKey:一對多,將字段定義在多的一端中
  • ManyToManyField:多對多,將字段定義在兩端中
  • OneToOneField:一對一,將字段定義在任意一端中

2.定義模型-models

from django.db import models
# Create your models here.
class Tag(models.Model):Tag_name = models.CharField(max_length=50, unique=True)def __str__(self):return self.Tag_nameclass Meta:verbose_name_plural = '標簽名'class Category(models.Model):Category_name = models.CharField(max_length=50, unique=True)def __str__(self):return self.Category_nameclass Meta:verbose_name_plural = '分類名'class Post(models.Model):title = models.CharField("題目", max_length=50, unique=True)content = models.TextField("內容")author = models.CharField("作者", max_length=200, default="郭十一")tag = models.ManyToManyField(Tag)category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)  # 這里的NULL表示,數據分類可以為空def __str__(self):return self.titleclass Meta:verbose_name_plural = "內容"

?Meta既對如下進行的修改顯示

3.定義模型-admin

?在注冊這三個表時,admin會自行運行里面的方法,所以不用調用

from django.contrib import admin
from .models import Category, Post,Tag
#第二種注冊表的方法:admin.site.register(Category)@admin.register(Post)
class PostAdmin(admin.ModelAdmin):#顯示設置list_display = ['title','content','author','display_tag','display_category']  #因為不能顯示多對多,所以要美化#區塊設置fieldsets =(("標題/正文", {'fields': ['id','title', 'content'], 'classes': ['collapse']}),("作者", {'fields': ['author'], 'classes': ['collapse']}),("分類/標簽", {'fields': ['tag','category'], 'classes': ['collapse']}),)#搜索功能search_fields = ['title', 'content','author','category__Category_name','tag__Tag_name']#過濾功能list_filter = ['author','category','tag']#分頁功能list_per_page = 3def display_tag(self, obj):return "/".join([tag.Tag_name for tag in obj.tag.all()])display_tag.short_description = "標簽"def display_category(self, obj):return obj.category.Category_namedisplay_category.short_description = "分類"class PostInlines(admin.StackedInline):   #StackedInline是上下布局,TabularInline左右布局model = Post   #關聯的類extra = 3      #空白3篇@admin.register(Category)   #第二類注冊方式
class CategoryAdmin(admin.ModelAdmin):list_display = ('display_category','id')  #與PostAdmin相同,顯示設置,需要自定義方法def display_category(self, obj):return obj.Category_namedisplay_category.short_description = "分類"@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):list_display = ('display_tag','id')  #與PostAdmin相同,顯示設置,需要自定義方法def display_tag(self, obj):return obj.Tag_namedisplay_tag.short_description = "標簽"

使用display_tag方法自定義的列名,并使用list_display顯示

4.模型類成員

  • save():將模型對象保存到數據表中
  • delete():將模型對象從數據表中刪除

1.方法一:

在views中,編寫視圖函數進行數據的保存與刪除

from django.shortcuts import render,HttpResponse
from .models import *def save_tag(request,tag_name):tag = Tag()tag.Tag_name = tag_nametag.save()return HttpResponse(f"已成功添加{tag_name}")def delete_tag(request,tag_name):tag = Tag.objects.get(Tag_name=tag_name)tag.delete()return HttpResponse(f"已成功刪除{tag_name}")

?配置主路由

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('',include('myday.urls')),
]

再使用正則配置子路由

from django.contrib import admin
from django.urls import path,include,re_path
from .views import *
urlpatterns = [re_path(r"save_tag/(\w+)",save_tag),re_path(r"delete_tag/(\w+)",delete_tag)
]

2.方法二:

自定義管理器類主要用于兩種情況 :

  1. 修改原始查詢集,重寫get_queryset()方法
  2. 向管理器類中添加額外的方法,如創建對象

models中進行自定義管理器的編寫

from django.db import models# Create your models here.
class PostManage(models.Manager):def get_queryset(self):#return super(PostManage,self).get_queryset()  #不變return super(PostManage,self).get_queryset().filter(deleted=False) #只返回沒有被邏輯刪除的部分def create(self,title,content,author,category):p = self.model()  # 創建模型類對象self.model可以獲得模型類p.title = titlep.content = contentp.author = authorp.category = categoryp.delete = Falsereturn p      # 返回模型對象class Post(models.Model):#...其他代碼post_object = PostManage()

在視圖中進行視圖函數編寫

def add_post(request):title = 'python 高級快速入門4'content = 'python 大法好'author = Post.post_object.get(id=1).author  # 作者# category = Category()  # 創建分類# category.category_name = 'python高級'# category.save()#或使用:因為在這兩個表中的object沒有被覆蓋category, created = Category.objects.get_or_create(Category_name='Python高級'  # 嘗試獲取或創建)# 2. 同樣的邏輯處理標簽tag, created = Tag.objects.get_or_create(Tag_name='Python大法')# tag = Tag()  # 創建標簽# tag.tag_name = 'python大法'# tag.save()p = Post.post_object.create(title,content,author,category)  #將帶有數據的模型對象返回p.save()p.tag.add(tag) # 添加標簽return HttpResponse('添加成功')

配置url

urlpatterns = [path("add_post",add_post)
]

5.查詢集

1.返回列表的過濾器如下:

  • all():返回所有數據
  • filter():返回滿足條件的數據
  • exclude():返回滿足條件之外的數據,相當于sql語句中where部分的not關鍵字
  • order_by():排序,參數為字段名,-號表示降序
def show_post(request):All = Post.post_object.all()Filter = Post.post_object.filter(category__Category_name__contains='Python')exclude = Post.post_object.exclude(category__Category_name__contains='Python')order =Post.post_object.filter(category__Category_name__contains='Python').order_by('tag')print("返回全部:",All)print("返回分類包含Python的:",Filter)print("返回分類不包含Python的:",exclude)print("返回排序:",order)return HttpResponse("返回成功")
返回全部: <QuerySet [<Post: 1>, <Post: 2>, <Post: python 高級快速入門>, <Post: python 高級快速入門2>, <Post: python 高級快速入門3>, <Post: python 高級快速入門4>]>
返回分類包含Python的: <QuerySet [<Post: python 高級快速入門>, <Post: python 高級快速入門2>, <Post: python 高級快速入門3>, <Post: python 高級快速入門4>]>
返回分類不包含Python的: <QuerySet [<Post: 1>, <Post: 2>]>
返回排序: <QuerySet [<Post: python 高級快速入門>, <Post: python 高級快速入門2>, <Post: python 高級快速入門3>, <Post: python 高級快速入門4>]>

2.返回單個值的過濾器如下:

  • get():返回單個滿足條件的對象 如果未找到會引發"模型類.DoesNotExist"異常 如果多條被返回,會引發"模型類.MultipleObjectsReturned"異常
  • count():返回當前查詢的總條數
  • exists():判斷查詢集中是否有數據,如果有則返回True,沒有則返回False

category__Category_name__contains:兩個下滑線的意思類似于category.Category_name.contains

Post.post_object.all().count()
3
Post.post_object.all().exists()  # 查詢結果集有數據,exists返回True
True 
Post.post_object.filter(id=1000).exists()  # 數據中不存在id為1000的數據,查詢結果集為空,返回False
False

運算符如下:

exact:表示相等

contains:是否包含

startswith、endswith:以指定值開頭或結尾

iexact,icontains,istartswith,iendswith功能同上面四個一樣,前面加字母i表示不區分大小寫。

isnull:是否為null

in:是否包含在范圍內

gt:大于

gte:大于等于

lt:小于

lte:小于等于

exclude()方法:返回滿足條件之外的數據,實現不等于效果

year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算

F對象 專門取對象中某列值的操作,F() 返回的實例用作查詢內部對模型字段的引用。這些引用可以用于查詢的filter 中來比較相同模型實例上不同字段之間值的比較。

Q對象 邏輯運算

注意:在django中查詢條件的運算符采用兩個下劃線連接。 比如:

Post.post_object.filter(id__exact=1)  #查詢條件:id等于1的數據

id大于1的數據:

Post.post_object.filter(id__gt=1)

翻譯成sql語句為:

select * from Post where id>1;

演示:

  • exact 等于 查詢id等于1的數據
Post.post_object.filter(id__exact=1)  #查詢條件:id等于1的數據,注意是兩個下劃線

djago查詢中條件查詢默認使用exact運算符。 查詢相等可簡寫:

Post.post_object.filter(id=1)
  • contains:是否包含 查詢標題(title字段) 中包含'django'的文章
>>> Post.post_object.filter(title__contains='django')
<QuerySet [<Post: e10分鐘入門django>, <Post: django 快速開發>]>
  • startswith、endswith:以指定值開頭或結尾

查詢標題中以python開頭的文章

>>> Post.post_object.filter(title__startswith='python')
<QuerySet [<Post: python 高級快速入門>]>

查詢標題中以django結尾的文章

>>> Post.post_object.filter(title__endswith='django')
<QuerySet [<Post: e10分鐘入門django>]>
  • isnull:是否為null 如果數據庫中有字段值為null的不能直接使用 '字段=null' 的方式查詢,需要使用isnull判斷值是否為null
>>> Post.post_object.filter(title__isnull=False)  #查詢文章標題不為null的數據
<QuerySet [<Post: python 高級快速入門>, <Post: e10分鐘入門django>, <Post: django 快速開發>]>
>>> Post.post_object.filter(title__isnull=True) <p>#查詢文章標題為null的數據</p> 
<QuerySet []>
  • in:是否包含在范圍內 查詢id為2、3,4的文章,參數是一個列表,id在列表中,就是符合條件的。
>>> Post.post_object.filter(id__in=[2,3,4])
<QuerySet [<Post: e10分鐘入門django>, <Post: django 快速開發>]>
  • gt:大于 查詢id大于3 的文章
>>> Post.post_object.filter(id__gt=3)
<QuerySet [<Post: python 高級快速入門>, <Post: django 快速開發>]>
  • gte:大于等于 查詢id大于等于3 的文章
>>> Post.post_object.filter(id__gte=3)
<QuerySet [<Post: python 高級快速入門>, <Post: e10分鐘入門django>, <Post: django 快速開發>]>
  • lt:小于 查詢id小于4的文章
>>> Post.post_object.filter(id__lt=4)
<QuerySet [<Post: e10分鐘入門django>]>
  • lte:小于等于 查詢id小于等于4的文章
>>> Post.post_object.filter(id__lte=4)
<QuerySet [<Post: e10分鐘入門django>, <Post: django 快速開發>]>
  • year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算 查詢2018年寫的文章:
>>> Post.post_object.filter(created_time__year=2018)
<QuerySet [<Post: python 高級快速入門>, <Post: e10分鐘入門django>]>

查詢2018年之前寫的文章

>>> Post.post_object.filter(created_time__year__lt=2018)
<QuerySet [<Post: django 快速開發>]>

查詢2018年1月1日之后的文章

>>> Post.post_object.filter(created_time__gte=date(2018,1,1))

F對象

如果查詢條件為兩個屬性值比較那么需要用到F對象。使用F對象,被定義在django.db.models中所有要使用F對象要先導入

導入F對象。

from django.db.models import F

F() 返回的實例用作查詢內部對模型字段的引用。這些引用可以用于查詢的filter 中來比較相同模型實例上不同字段之間值的比較。

>>> Post.post_object.filter(created_time=F('modified_time'))
<QuerySet [<Post: python 高級快速入門>]>

Django 支持對F() 對象使用加法、減法、乘法、除法、取模以及冪計算等算術操作,兩個操作數可以都是常數和其它F() 對象。

比如:查詢閱讀量大于兩倍評論量的數據

Post.post_object.filter(read__gt=F('comment')*2)

Q對象:Q對象,被定義在django.db.models中所有要使用Q對象要先導入

from django.db.models import Q

兩個條件邏輯與運算在多個條件用逗號分隔就是邏輯與:

>>> Post.post_object.filter(title='django 快速開發',id__gt=2)
<QuerySet [<Post: django 快速開發>]>

如果需要實現邏輯或or的查詢,需要使用Q()對象結合|運算符 Q對象可以使用&、|連接,&表示邏輯與,|表示邏輯或 Q對象使用~操作符,表示邏輯非,not

例如:查詢標題以django結尾或者python開頭的文章。這種邏輯或的關系,直接查詢是沒辦法查詢的,需要使用Q對象結合 | 查詢

>>> Post.post_object.filter(Q(title__startswith='python') | Q(title__endswith='django'))
<QuerySet [<Post: python 高級快速入門>, <Post: e10分鐘入門django>]>

相當于mysql中的語句:

WHERE title LIKE 'python%' OR title LIKE '%django'

查詢 id不等于3的文章:

>>> Post.post_object.filter(~Q(id=3))
<QuerySet [<Post: python 高級快速入門>, <Post: django 快速開發>]>

3、關聯查詢

Django中也能實現類似于mysql中的連接查詢。

關聯模型類名小寫屬性名運算符=值

例如:查詢分類為'django'的文章

>>> Category.objects.filter(post__title='django 快速開發')
<QuerySet [<Category: django>]>

查詢分類為django的所有文章

>>> Post.post_object.filter(category__category_name='django')
<QuerySet [<Post: e10分鐘入門django>, <Post: django 快速開發>]>

4、反向查詢

如果模型I有一個ForeignKey,那么該ForeignKey 所指的模型II實例可以通過一個管理器返回前面有ForeignKey的模型I的所有實例。這個管理器的名字為foo_set,其中foo是源模型的小寫名稱。

>>> cg = Category.objects.filter(category_name='django')[0]
>>> cg
<Category: django>
>>> cg.post_set.all()
<QuerySet [<Post: e10分鐘入門django>, <Post: django 快速開發>]>

5、聚合函數

使用aggregate()過濾器調用聚合函數, 常用聚合函數:Avg,Count,Max,Min,Sum,被定義在django.db.models中 需要使用要先導入聚合函數

聚合函數返回結果是一個字典:

>>> from django.db.models import Max
>>> Post.post_object.aggregate(Max('id')) # 查詢文章表中id的最大值
{'id__max': 7}>>> from django.db.models import Min
>>> Post.post_object.aggregate(Min('id'))  # 查詢文章表中id的最小值
{'id__min': 3}>>> from django.db.models import Avg
>>> Post.post_object.aggregate(Avg('id'))  # 查詢所有文章id的平均數
{'id__avg': 4.666666666666667}
>>> from django.db.models import Count
>>> Post.post_object.aggregate(Count('id'))   #統計一共多少文章。
{'id__count': 3}
>>> from django.db.models import Sum
>>> Post.post_object.aggregate(Sum('id'))
{'id__sum': 14}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83996.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

八股學習-JS的閉包

一.閉包的定義 閉包是指函數和其周圍的詞法環境的引用的組合。 簡單來說&#xff0c;就是函數可以記住并訪問其在定義時的作用域內的變量&#xff0c;即使該函數在其它作用域調用。 也就是說&#xff0c;閉包讓你可以在一個內層函數中訪問到其外層函數的作用域。 function …

qt使用筆記二:main.cpp詳解

Qt中main.cpp文件詳解 main.cpp是Qt應用程序的入口文件&#xff0c;包含程序的啟動邏輯。下面我將詳細解析其結構和功能。 基本結構 一個典型的Qt main.cpp 文件結構如下&#xff1a; #include <QApplication> // 或者 QGuiApplication/QCoreApplication #include &…

如何構建船舵舵角和船的航向之間的動力學方程?它是一個一階慣性環節嗎?

提問 船舵和船的航向之間的動力學方程是什么&#xff1f;是一個一階慣性環節嗎&#xff1f; 回答 船舵和船的航向&#xff08;航向角&#xff09;之間的動力學關系并不是一個簡單的一階慣性環節&#xff0c;雖然在某些簡化控制模型中可以近似為一階系統。實際上&#xff0c;…

抖去推--短視頻矩陣系統源碼開發

一、開發短視頻矩陣系統的源碼需要以下步驟&#xff1a; 確定系統需求&#xff1a; 根據客戶的具體業務目標&#xff0c;明確系統需實現的核心功能模塊&#xff0c;例如用戶注冊登錄、視頻內容上傳與管理、多維度視頻瀏覽與推薦、用戶互動&#xff08;評論、點贊、分享&#xf…

Windows 下搭建 Zephyr 開發環境

1. 系統要求 操作系統&#xff1a;Windows 10/11&#xff08;64位&#xff09;磁盤空間&#xff1a;至少 8GB 可用空間&#xff08;Zephyr 及其工具鏈較大&#xff09;權限&#xff1a;管理員權限&#xff08;部分工具需要&#xff09; 2. 安裝必要工具 winget安裝依賴工具&am…

三分算法與DeepSeek輔助證明是單峰函數

前置 單峰函數有唯一的最大值&#xff0c;最大值左側的數值嚴格單調遞增&#xff0c;最大值右側的數值嚴格單調遞減。 單谷函數有唯一的最小值&#xff0c;最小值左側的數值嚴格單調遞減&#xff0c;最小值右側的數值嚴格單調遞增。 三分的本質 三分和二分一樣都是通過不斷縮…

安全月報 | 傲盾DDoS攻擊防御2025年5月簡報

引言 在2025年5月&#xff0c;全球數字化進程高歌猛進&#xff0c;各行各業深度融入數字浪潮&#xff0c;人工智能、物聯網、大數據等前沿技術蓬勃發展&#xff0c;進一步夯實了數字經濟的基石。然而&#xff0c;在這看似繁榮的數字生態背后&#xff0c;網絡安全威脅正以驚人的…

【Spring】Spring哪些源碼解決了哪些問題P1

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀和評論&#x1f604;。 目錄 Spring是怎么處理請求的&#xff1f;Spring請求方…

堅持每日Codeforces三題挑戰:Day 4 - 題目詳解(2025-06-07,難度:1000, 1100, 1400)

前言&#xff1a; 此文章主要是記錄每天的codeforces刷題&#xff0c;還有就是給其他打算法競賽的人一點點點點小小的幫助&#xff08;畢竟現在實力比較菜&#xff0c;題目比較簡單&#xff0c;但我還是會認真寫題解&#xff09;。 之前忙學校事情&#xff0c;懈怠了一段時間…

6.7本日總結

一、英語 復習默寫list10list19&#xff0c;07年第3篇閱讀 二、數學 學習線代第一講&#xff0c;寫15講課后題 三、408 學習計組第二章&#xff0c;寫計組習題 四、總結 本周結束線代第一講和計組第二章&#xff0c;之后學習計網4.4&#xff0c;學完計網4.4之后開操作系…

PGSR : 基于平面的高斯濺射高保真表面重建【全流程分析與測試!】【2025最新版!!】

【PGSR】: 基于平面的高斯濺射高保真表面重建 前言 三維表面重建是計算機視覺和計算機圖形學領域的核心問題之一。隨著Neural Radiance Fields (NeRF)和3D Gaussian Splatting (3DGS)技術的發展&#xff0c;從多視角RGB圖像重建高質量三維表面成為了研究熱點。今天我們要深入…

從認識AI開始-----AutoEncoder:生成模型的起點

前言 從15年開始&#xff0c;在深度學習的重要模型中&#xff0c;AutoEncoder&#xff08;自編碼器&#xff09;可以說是打開生成模型世界的起點。它不僅是壓縮與重建的工具&#xff0c;更是VAE、GAN、DIffusion等復雜生成模型的思想起源。其實AutoEncoder并不復雜&#xff0c;…

解決MySQL8.4報錯ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

最近使用了MySQL8.4 , 服務啟動成功,但是就是無法登陸,并且報錯: ERROR 1524 (HY000): Plugin mysql_native_password is not loaded 使用如下的命令也報錯 mysql -u root -p -P 3306 問題分析: 在MySQL 8.0版本中,默認的認證插件從mysql_native_password變更為cachi…

TDengine 開發指南——無模式寫入

簡介 在物聯網應用中&#xff0c;為了實現自動化管理、業務分析和設備監控等多種功能&#xff0c;通常需要采集大量的數據項。然而&#xff0c;由于應用邏輯的版本升級和設備自身的硬件調整等原因&#xff0c;數據采集項可能會頻繁發生變化。為了應對這種挑戰&#xff0c;TDen…

嵌入式面試高頻(5)!!!C++語言(嵌入式八股文,嵌入式面經)

一、C有幾種傳值方式之間的區別 一、值傳遞&#xff08;Pass by Value&#xff09; 機制&#xff1a;創建參數的副本&#xff0c;函數內操作不影響原始數據語法&#xff1a;void func(int x)特點&#xff1a; 數據安全&#xff1a;原始數據不受影響性能開銷&#xff1a;需要復…

Spark 之 AQE

個人其他鏈接 AQE 執行順序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 產生 AQE 的 循環觸發點 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…

FSMC擴展外部SRAM

提示&#xff1a;文章 文章目錄 前言一、背景二、2.12.2 三、3.1 總結 前言 前期疑問&#xff1a; 本文目標&#xff1a; 一、背景 2025年6月7日 19:34:48 今天看了FSMC擴展外部SRAM的文章&#xff0c;大概理解到stm32除了內部存儲器&#xff0c;還可以擴展外部存儲器。其中s…

【CSS-6】深入理解CSS復合選擇器:提升樣式表的精確性與效率

CSS選擇器是前端開發的基石&#xff0c;而復合選擇器則是其中最強大且實用的工具之一。本文將全面解析CSS復合選擇器的類型、用法、優先級規則以及最佳實踐&#xff0c;幫助你編寫更高效、更精確的樣式表。 1. 什么是復合選擇器&#xff1f; 復合選擇器是通過組合多個簡單選擇…

使用python實現奔跑的線條效果

效果&#xff0c;展示&#xff08;視頻效果展示&#xff09;&#xff1a; 奔跑的線條 from turtle import * import time t1Turtle() t2Turtle() t3Turtle() t1.hideturtle() t2.hideturtle() t3.hideturtle() t1.pencolor("red") t2.pencolor("green") t3…

從零搭建uniapp項目

目錄 創建uni-app項目 基礎架構 安裝 uni-ui 組件庫 安裝sass依賴 easycom配置組件自動導入 配置view等標簽高亮聲明 配置uni-ui組件類型聲明 解決 標簽 錯誤 關于tsconfig.json中提示報錯 關于非原生標簽錯誤&#xff08;看運氣&#xff09; 安裝 uview-plus 組件庫…