主頁 > 後端開發 > django中操作mysql資料庫

django中操作mysql資料庫

2022-09-04 07:08:25 後端開發

1.準備作業(django連接資料庫)

1.本機電腦下載好mysql資料庫
2.打開django,修改setting.py中的DATABASES配置項

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'python',
        'USER': 'root',
        'PASSWORD': 'zy199909237412',
        'HOST': '127.0.0.1',
        'POST': '3306',
    }
}

3.在pycharm的右側欄點擊database或者做下角點擊database,連接資料庫,如果都沒有,則去pluging里面尋找是否裝了database插件!!
image
或者
image

4.輸入需要連接的資料庫
image

5.這里沒有下載驅動的需要先下載,不然連接不上

image

6.在django專案中的__init__.py中匯入pymysql,告訴django使用pymysql連接資料庫,而不是mysqldb模塊

import pymysql
pymysql.install_as_MySQLdb()

7.簡單使用pycharm操作資料庫
image

2.django操作資料庫(ORM)

2.1 ORM簡介

物件關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向物件與關系資料庫存在的互不匹配的現象的技術,ORM在業務邏輯層和資料庫層之間充當了橋梁的作用

簡單來說,ORM就是使用面向物件的方式來操作資料庫!

(1)ORM的優勢:

1.將表和類一一對應,類的每個實體對應表中的一條記錄,類的每個屬性對應表中的每個欄位,
2.ORM提供了對資料庫的映射,不用直接撰寫SQL代碼,只需操作物件就能對資料庫操作資料,提高了作業效率

(2)ORM的劣勢

1.一些查詢操作完成不了
2.一定程度上犧牲了程式的執行效率
3.用久了會忘SQL語言

2.2 創建表和欄位

from django.db import models # 1.匯入models模塊

# 2.定義一個類繼承models.Model類(創建一張專案名(應用名)_類名的表)
class Book(models.Model):

# 3.定義類屬性title和price(對應是創建欄位名、欄位型別和欄位選項)
title = models.CharField('書名', max_length=50, default='')
price = models.DecimalField('價格', max_digits=7, decimal_places=2)

class 模型類名(models.Model):
           欄位名 = models.欄位型別(欄位選項)


在類里面不指定主鍵欄位,django會幫您自動創建一個id主鍵!

注意:對于資料庫的增刪改查之后都要進行資料庫遷移
1.執行python3 manage.py makemigration---將應用下的model.py檔案生成一個中間件檔案,并保存在migrations檔案中
2.執行python3 manage.py migrate ----將每個應用下的migrations目錄中的中間檔案同步回資料庫

2.3 欄位的增刪改查

1.增加欄位

直接在對應的類里面添加欄位、欄位型別和欄位選項

注意增加的欄位都需要指定default = '' 或者null = True,如下添加info欄位:

info = models.CharField(max_length=32,default='',null=True)

2.修改欄位

直接在類里面修改對應欄位就行!
然后執行資料庫遷移命令!

3.欄位的洗掉

直接在類里面將需要刪的欄位注釋掉就行!
然后執行資料庫遷移命令!

注意:執行完畢了,資料庫對應的資料就沒有了!慎重!!!

2.4 單表資料的增刪改查

每個繼承model.Model的模型類,都有一個objects物件被同樣繼承下來,這個物件叫管理器物件,資料庫的增刪改查都是通過模型的管理器實作,

對于資料的增刪改查,其實最主要的都是在views.py的視圖函式里完成的!因此,我們需要在視圖函式里進行資料庫的增刪改查操作!

2.4.1單表資料的查詢

1.filter()查詢方法

from app01 import models  # 1.匯入自己創建的模型類

# 2.filter查詢方法,語法是:models.類名.objects.filter(),filter內可以查詢多個引數,默認是and連接,等于SQL語法的where方法!,不傳參時代表查所有

res = models.MyModle.objects.filter(username=username)
# 該方法有一個回傳值,回傳的是一個queryset物件,該物件可以看成是串列套字典的形式,串列里面套著一個個資料物件,形式為:[資料物件1,資料物件2]
# queryset串列也支持索引,切片操作,但是不支持負數索引,可以當成串列套字典的形式for回圈

user_obj = res[0]  # 得到的是具體的資料物件,但是官方不推薦使用索引的方式取到具體的資料物件,它推薦的是res.first()方法取到串列里的第一個資料物件!

print(user_obj.username)  # 通過點大法,即.屬性的方法得到具體的值

2.all()查詢所有方法

# all方法查詢User表的所有資料,回傳的是一個queryset物件串列,
user_queryset = models.User.objects.all()

2.4.2單表資料的增加

1.create()方法

# create增加資料方法,語法是:models.類名.objects.create()
res = models.MyModle.objects.create(username=username,password=password)
# 該方法也有一個回傳值,回傳的是當前這個資料物件
print(res.username,res.password) # 可以通過點屬性的方法,查看到對應屬性的值

2.save()方法

obj = models.User(username=username,password=password)
obj.save() # 保存資料到資料庫

2.4.3單表資料的修改

1.upadte()方法:先查出來,在更新

# 查出id為什么的物件,然后進行批量更新,filter可以查所有,也可以查具體
models.User.objects.filter(id=edit_id).update(username=username,password=password)

2.賦值+save()方法

obj = models.User.objects.filter(id=edit_id).first() #拿到待修改的物件
obj.username = username # 采用給該物件屬性重新賦值的方法修改資料
obj.password = password
obj.save() # 最后賦值完記得需咬保存

2.4.4單表資料洗掉

1.delete()方法:用于批量洗掉

# 先filter查出需要洗掉的物件,然后.delete()方法
models.User.objects.filter(id=delete_id).delete() # 這里是把filter查出來的queryset物件里全部洗掉了,有幾個刪幾個,
# 這里的id可以改寫成pk,用了pk就不需要知道表的主鍵是id還是其他什么了!

2.單一洗掉

res = models.User.objects.filter(id=delete_id).first()
res.delete()  # 單一洗掉

2.4.5補充13條單表查詢

# 1.all()  查詢所有資料

# 2.filter()     帶有過濾條件的查詢,拿到的是一個queryset物件串列

# 3.get()        直接拿資料物件 但是條件不存在直接報錯

# 4.first()      拿queryset里面第一個元素
# res = models.User.objects.all().first()
# print(res) # 拿到queryset物件串列里的第一個資料物件

# 5.last()
# res = models.User.objects.all().last()
# print(res) # 同上,拿到的是最好一個

# 6.values()  可以指定獲取的資料欄位  select name,age from ...
# res = models.User.objects.values('name','age')
# print(res)  # 結果為:串列套字典<QuerySet [{'name': 'jason', 'age': 18}, {'name': 'egonPPP', 'age': 84}]>

# 7.values_list()
# res = models.User.objects.values_list('name','age')
# print(res) # 結果為:串列套元祖,<QuerySet [('jason', 18), ('egonPPP', 84)]>

# 8.query
#  print(res.query)  # 查看內部封裝的sql陳述句
#  上述查看sql陳述句的方式  只能用于queryset物件
#  只有queryset物件才能夠點擊query查看內部的sql陳述句

# 9.distinct()  去重
# res = models.User.objects.values('name','age').distinct()
# print(res)
"""
去重一定要是一模一樣的資料
如果帶有主鍵那么肯定不一樣 你在往后的查詢中一定不要忽略主鍵
"""

# 10.order_by()
# res = models.User.objects.order_by('age')  # 默認升序
# res = models.User.objects.order_by('-age')  # 降序
# print(res)

# 10.reverse()  反轉的前提是 資料已經排過序了  order_by()
# res = models.User.objects.all()
# res1 = models.User.objects.order_by('age').reverse()
# print(res,res1)

# 11.count()  統計當前資料的個數
# res = models.User.objects.count()
# print(res)

# 12.exclude()  排除在外
# res = models.User.objects.exclude(name='jason')
# print(res)

# 13.exists()  #基本用不到因為資料本身就自帶布林值  回傳的是布林值
# res = models.User.objects.filter(pk=10).exists() # 判讀主鍵為10的是否存在,回傳是布林值
# print(res)

2.4.6 神奇的雙下劃線查詢

__exact:等值查詢 
__contains:包含指定值--區分大小寫   a2=Book.objects.filter(name____contains=‘n’) 查詢出名字里包含n的
__icontains:包含指定值--忽略大小寫
__startwith:以xxx開始
__endwith:以xxx結尾
__gt:大于指定值,例如:a2=Book.objects.filter(id__gt=3)
__gte:大于等于
__it:小于
__ite:小于等于
__in:查找資料是否在指定范圍內 a2=Book.objects.filter(id__in=[1,3,5])
__range:查詢資料是否在指定區間范圍內 a2=Book.objects.filter(id__range=[1,5]) 查詢出id在1-5的收尾都要
a2=Book.objects.filter(register_time__month='1'):查詢出月份是1月的資料
a2=Book.objects.filter(register_time__year='2022'):查詢出年份在2022的資料

2.5 多表資料操作

2.5.1 orm創建表關系

表的關系有三種,分別是:一對一、一對多、多對多

判斷表和表之間的關系:換位思考法

具體創建表關系語法:

"""
圖書和出版社:一對多關系,外鍵建在多的一方
圖書和作者:多對多關系,外鍵建在任何一方,但是推薦建在查詢頻率高的一方
作者和作者詳情:一對一關系,外鍵建在任何一方,但是推薦建在查詢頻率高的一方
"""
class Book(models.Model):
    title = models.CharField(verbose_name='書名',max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    create_time = models.DateTimeField(auto_now_add=True)
    # 一對多外鍵建在多的一方,to='是需要建立外鍵的那一個類名publish'
    # 注意:在django2、3里面需要指定級聯洗掉引數on_delete=models.CASCADE
    publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
    # 多對多外鍵建在查詢頻率高的一方,多對多在sql陳述句中需要自己手動建第三張表,但是在django中,django遇到會自動幫你創建第三張表!
    author = models.ManyToManyField(to='Author')

class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=64)
    email = models.EmailField()

class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    # 一對一外鍵建在查詢頻率高的一方,需要指定on_delete
    author_detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)

class AuthorDetail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=64)

2.5.2 一對多關系的增刪改

from app01 import models
# 1.增
# 法1:直接寫book表里面的外鍵的實際欄位名,然后指定關聯publish的id就行
models.Book.objects.create(title='活著',price=33,publish_id=1)
# 法2:虛擬欄位,傳入一個具體的publish的資料物件就行
publish_obj = models.Publish.objects.filter(pk=2).first()
# 注意這里需要.first()一下,因為不點拿到的是queryset物件,點一下拿到queryset里的具體資料物件
models.Book.objects.create(title='我',price=555,publish=publish_obj)

# 2.刪
models.Publish.objects.filter(pk=2).delete() # 將book里關聯id=2的也全部洗掉

# 3.改
# 法1:update里面傳具體需要修改的外鍵欄位名和值
models.Book.objects.filter(pk=2).update(publish_id=2) # 將id為2的書的關聯publish_id改成2
# 法2:update里面傳入虛擬欄位publish=需要關聯的publish資料物件,同增的法2

2.5.3 多對多關系的增刪改

# 1.增
# 一本書對應多個作者,先查出這個書的物件,在通過物件.多對多欄位名.add()方法關聯作者id
# add()方法里面可以法數字1,2,3,表示關聯作者的主鍵值;還可以放具體的作者資料物件!!
book_obj = models.Book.objects.filter(pk=1).first()
book_obj.author.add(1,2)
author_obj = models.Author.objects.filter(pk=1).first()
book_obj.author.add(author_obj)

# 2.刪
# 洗掉這邊書關聯的作者id為1和2的,和add方法一樣也支持里面放具體的作者資料物件!!
book_obj.author.remove(1,2)

# 3.改
# set方法修改該書關聯的作者id為1和3,set方法和add方法一樣也支持里面放具體的作者資料物件!!
# 注意:set方法里面必須放一個可迭代物件,比如串列!
book_obj.author.set([1,3])

# 4.清空當前書和作者的對應關系
book_obj.author.clear()

2.5.4 多表的查詢操作

查詢的時候,分正方向查詢,外鍵欄位在我手上,我查你就是正向查詢;反之,不在我手上,我查你就是反向查詢,

查詢口訣:正向查詢按欄位,反向查詢按表名小寫;

1.基于物件的多表查詢

 from app01 import models

    # 1.查詢書籍主鍵為1的出版社名稱 ----正向一對多查詢
    book_obj = models.Book.objects.filter(pk=1).first() # 先得到主鍵為1的書籍物件
    res = book_obj.publish # 正向查詢按欄位,Book表里面有一個publish欄位,回傳一個與主鍵1關聯的出版社物件
    print(res)
    print(res.name) # 物件.的方法查詢具體的欄位屬性
    print(res.addr)

    # 2.查詢書籍主鍵為1的作者----正向多對多查詢
    book_obj1 = models.Book.objects.filter(pk=1).first()
    res = book_obj1.author.all() # 不.all()回傳的是一個app01.Author.None
    print(res) # .all()回傳的是<QuerySet [<Author: Author object (1)>, <Author: Author object (2)>]>,書籍id為1對應兩個作者
    print(res.first().name) # 通過.first().name 方式獲取作者的具體資訊

    # 3.查詢作者王的電話 ----正向一對一查詢
    author_obj = models.Author.objects.filter(name='王').first()
    res = author_obj.author_detail
    print(res) # 回傳的是AuthorDetail object (1),是一個作者詳情物件
    print(res.phone) # .欄位查出對應作者的詳情資訊
    """
    總結:正向查詢時,當你的結果可能是多個的時候,就需要加.all(),如果是一個直接拿到資料物件
    """

    # 4.查詢出版社是東風出版社的書----反向一對多查詢
    publish_obj = models.Publish.objects.filter(name='東風').first()
    res = publish_obj.book_set.all()
    print(res)

    # 5.查詢作者是王寫過的書----反向多對多查詢
    author_obj = models.Author.objects.filter(name='王').first()
    res = author_obj.book_set.all()
    print(res)

    # 6.查詢電話號碼是122324233的作者
    author_detail_obj = models.AuthorDetail.objects.filter(phone=122324233).first()
    res = author_detail_obj.author
    print(res.name)
    """
    總結:反向查詢的時候,如果結果為多個,就需要加_set.all();如果是一對一結果就一個,就不用!
    """

2.基于雙下劃線__的多表查詢


    from app01 import models

    # 1.查詢王這個作者的年齡和手機號--正向一對一查詢
    # 先得到王這個物件,然后.values,里面放需要查詢的欄位名,正向則直接'欄位名';反向則'表名小寫__欄位名'
    res = models.Author.objects.filter(name='王').values('age','author_detail__phone')
    print(res) # 得到的是一個queryset物件(串列里套了一個字典)
    dict = res.first()  # .first()方法取到該字典物件
    print(dict['age']) # 字典方式取到具體需要的值
    # 反向查詢
    res = models.AuthorDetail.objects.filter(author__name='王').values('phone','author__age')
    print(res)

    # 2.查詢書籍主鍵為1的出版社名字和書的價格---正向一對多查詢
    res = models.Book.objects.filter(pk=1).values('price','publish__name')
    print(res)
    # 反向查詢
    res = models.Publish.objects.filter(book__id=1).values('name','book__price')
    print(res)

    # 3.查詢書籍主鍵為1的作者姓名和書籍名稱
    res = models.Book.objects.filter(pk=1).values('title','author__name')
    print(res)
    # 反向查詢
    res = models.Author.objects.filter(book__id=1).values('name','book__title')
    print(res)
	
    # 4.終極大招:查詢書籍主鍵為1的作者的電話號碼!!!---跨了book、author、author_detail三張表查詢
    res =models.Book.objects.filter(pk=1).values('author__author_detail__phone')
    print(res)
    # 反向查詢
    res = models.Author.objects.filter(book__id=1).values('author_detail__phone')
    print(res)

2.6 欄位型別與欄位選項

from django.db import models

# Create your models here.
class MyBook(models.Model):
    # 1.字串欄位型別CharField,必須傳的欄位選項是max_length=指定最大字符數,verbose_name=''指定該欄位在django后臺管理中的描述名
    name = models.CharField(max_length=32,verbose_name='姓名')
	
    # 2.數字欄位型別IntegerField
    age = models.IntegerField()
	
    # 3.日期時間欄位型別DateTimeField
    register_time = models.DateTimeField(auto_now_add=True)
	
    # 4.日期欄位型別
    register_time = models.DateField(auto_now_add=True)
	
    # 針對這兩個欄位型別,有兩個關鍵性引數
    # auto_now:每次操作資料的時候,該欄位會自動將當前時間更新
    # auto_now_add:在創建資料的時候會自動將當前時間記錄下來,以后只要不認為修改就一直不變
	
    # 5.郵箱欄位
    email = models.EmailField()
	
    # 6.大數字欄位型別
    phone = models.BigIntegerField()
	
    # 7.小數欄位,有兩個欄位選項max_digits=8,表示連小數一共8位;decimal_places=2,表示小數部分2位,
    price = models.DecimalField(max_digits=8,decimal_places=2)
	
    # 8.布爾型欄位,傳入引數是False\True,在資料庫中對應0\1
    boolean = models.BooleanField(False)
	
    # 9.文本欄位型別,沒有字數限制,大文本
    text = models.TextField()
	
    # 10.檔案欄位型別,upload_to=''引數:給該欄位傳一個檔案物件,會自動將該檔案保存在/data目錄下,如何把該檔案的路徑傳到資料庫中
    file = models.FileField(upload_to='/data')
	
    自定義欄位暫略

2.7聚合查詢

聚合函式通常是和分組一起使用的,關鍵字.aggregate()方法

    # 先匯入五個聚合函式
    """
    小技巧:只要跟資料庫相關的模塊,基本上都在django.db.models里面
    如果沒有則可能在django.db里面
    """
    from django.db.models import Sum,Avg,Min,Max,Count
    # 1.求書這個表里面的價格平均值和總合和最大值...單獨使用需要使用.aggregate方法
    res = models.Book.objects.aggregate(Avg('price'),Max('price'),Sum('price'))
    print(res)

2.8分組查詢

分組查詢關鍵字annotate

# 1.統計每本書的作者個數
    res = models.Book.objects.annotate(author_num=Count('author')).values('author_num')
    print(res)
    """
    說明:
    1.分組查詢的關鍵字是annotate
    2.models后面點什么,就是按什么分的組
    3.author_num是自己自定義的欄位,用來存統計出來的每本書對應的個數
    4.count里面的author指的是統計作者的個數
    5.values('author_num')是取出統計出來的作者個數
    """

    # 2.統計每個出版社賣的最便宜書的價格
    res = models.Publish.objects.annotate(book_price=Min('book__price')).values('name','book_price')
    print(res)
    print('=========')
    # 3.統計作者個數不止一個的圖書
    # 先按圖書分組,求出圖書對應的作者個數;再filter過濾出作者個數大于1的
    res = models.Book.objects.annotate(author_num=Count('author')).filter(author_num__gt=1).values('title','author_num')
    print(res)

    # 4.查詢每個作者出的書的總價格
    res = models.Author.objects.annotate(book_price=Sum('book__price')).values('name','book_price')
    print(res)

    """
    那么如何按照欄位分組呢?
    models.Book.objects.values('price').annotate()  
    # 如果annotate前面出現了values,則它將不在按照book分組,而是按照values分組
    """

2.9F與Q查詢

2.9.1F查詢

# F查詢
    # 1.查詢賣出數大于庫存數的書籍
    # F查詢
    """
    能夠幫助你直接獲取到表中某個欄位對應的資料
    """
    from django.db.models import F # 匯入f模塊
    # res = models.Book.objects.filter(maichu__gt=F('kucun')) #f括號里放的是對應的欄位名
    # print(res)


    # 2.將所有書籍的價格提升500塊
    # models.Book.objects.update(price=F('price') + 500)


    # 3.將所有書的名稱后面加上爆款兩個字
    """
    在操作字符型別的資料的時候 F不能夠直接做到字串的拼接
    """
    from django.db.models.functions import Concat
    from django.db.models import Value  # 先匯入Concat和Value模塊
    models.Book.objects.update(title=Concat(F('title'), Value('爆款')))
    # models.Book.objects.update(title=F('title') + '爆款')  # 所有的名稱會全部變成空白

2.9.2Q查詢

# Q查詢
    # 1.查詢賣出數大于100或者價格小于600的書籍
    # res = models.Book.objects.filter(maichu__gt=100,price__lt=600)
    """filter括號內多個引數是and關系,并不能得到結果"""
    from django.db.models import Q # 匯入q模塊,實作或和not功能
    # res = models.Book.objects.filter(Q(maichu__gt=100),Q(price__lt=600))  # Q包裹逗號分割 還是and關系
    # res = models.Book.objects.filter(Q(maichu__gt=100)|Q(price__lt=600))  # | or關系
    # res = models.Book.objects.filter(~Q(maichu__gt=100)|Q(price__lt=600))  # ~ not關系
    # print(res)  # <QuerySet []>

    # Q的高階用法  能夠將查詢條件的左邊也變成字串的形式
    q = Q()
    q.connector = 'or'
    q.children.append(('maichu__gt',100))
    q.children.append(('price__lt',600))
    res = models.Book.objects.filter(q)  # 默認還是and關系
    print(res)

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/503534.html

標籤:其他

上一篇:Python獲取時光網電影資料

下一篇:阿里druid-spring-boot-starter 配置,個人整理以及遇到的問題(防止之后找不到)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more