四階段day3-django數(shù)據(jù)庫與模型的配置

一、做項目時是先創(chuàng)模型還是先創(chuàng)建數(shù)據(jù)庫

1痒留、

正向工程:通過面向對象的模型遷移創(chuàng)建數(shù)據(jù)庫的二維表(模型相對比較簡單谴麦,沒有專業(yè)的DBA,暫時也不考慮數(shù)據(jù)訪問的優(yōu)化)

python manage.py makemigrations ——生成遷移
python manage.py migrate ——執(zhí)行遷移

反向工程:根據(jù)關系型數(shù)據(jù)庫的二維表來生成對應的模型(有專業(yè)的DBA伸头,模型比較復雜匾效,項目的規(guī)模比較大)

python manage.py inspectdb (--database XXX)  >app/models.py

——》python會把默認的數(shù)據(jù)庫反向生成models.py,括號里可以選填某個數(shù)據(jù)庫反向導出模型恤磷。


settings.py文件默認數(shù)據(jù)庫配置信息
說明:默認數(shù)據(jù)庫指的是defaultC婧摺!扫步!
對應XXX數(shù)據(jù)庫的配置信息
注意:(--database XXX)中的XXX對應的是backend精绎,而不是數(shù)據(jù)庫名hrs!P科蕖代乃!
2、

如果django中配置了多個數(shù)據(jù)庫仿粹,那么需要配置數(shù)據(jù)庫路由搁吓。

我們可以這樣給各個app文件夾的models.py文件中的模型(類)添加app_label屬性打一個標簽,這樣的話我們可以通過檢查模型的app_lable來決定訪問數(shù)據(jù)庫時路由到哪個數(shù)據(jù)庫吭历。

為models.py文件中的模型添加app_label屬性

class TbEmp(models.Model):
    eno = models.IntegerField(primary_key=True)

    class Meta:
        managed = False
        db_table = 'tb_emp'
        app_label = 'hrs'   ——添加此屬性

為settings.py文件添加以下代碼

DATABASE_ROUTERS = [
    'app.routers.AuthRouter',
]

新增routers.py文件到app文件夾下堕仔,并完成有關代碼!

路由類需要提供4個方法:
db_for_read
db_for_write
allow_relation --> True
allow_migration --> True
對應看下圖表


1
2

======================================
數(shù)據(jù)庫單表查詢時晌区,對表中屬性選擇性的查詢能提高查詢性能和節(jié)約內存摩骨,采取only方法來優(yōu)化:

emps=Models.objects.all().only('name','gender','age')
=========================
props=('ename','job','sal','comm')
emps=TbEmp.objects.all().only(*props).order_by('-sal')[:10]

在使用ORM框架處理關聯(lián)查詢,聯(lián)表查詢時如果不做任何處理將會導致1+N查詢問題朗若。如果希望使用內連接或者左外連接來優(yōu)化查詢恼五,
那么可以使用下面的方式優(yōu)化:
-select_related('關聯(lián)屬性') ——多對一
-prefetch_related('關聯(lián)屬性') ——多對多

props=('ename','job','sal','comm')
emps=TbEmp.objects.all().only(*props).select_related('外表A屬性1').select_related('外表B屬性2')

django框架中對查詢的數(shù)據(jù)分頁處理流程
1、前端傳回一個page參數(shù)哭懈,沒有則默認為第一頁灾馒;
2、查詢符合條件的模型對象(訪問數(shù)據(jù)庫)遣总,并對模型對象進行切片處理(模型對象是一個列表睬罗,故可切片)

    props = ('no', 'name', 'job', 'mgr', 'sal', 'dept')
    emps = Emp.objects.all().only(*props)\
        .select_related('mgr').select_related('dept')\
        .order_by('-sal')[(page - 1) * size:page * size]
size即為每頁的數(shù)據(jù)個數(shù)轨功,自定。

==============================================

如果django的ORM框架在功能或者性能上達不到要求那么也可以通過原生的SQl查詢來代替ORM框架的工作

django框架中如何寫原生sql代碼

1容达、連接數(shù)據(jù)庫并獲取游標
from django.db import connections古涧,connection
con=connection.cursor()  #連接default數(shù)據(jù)庫并獲取游標
con=connections['dafault'].cursor()
con=connections['backend'].cursor()  #連接backend對應的數(shù)據(jù)庫并獲取游標
2、編寫sql代碼
con.excude('sql代碼')  #sql代碼要用引號包起來花盐,同時如果存在字符串格式化蒿褂,要用  百分號%s 占位符格式  而不用 f'{}' 格式
3、獲取數(shù)據(jù)庫返回結果
result=con.fetch()  #獲取一個結果
result=con.fetchall() #獲取所有結果
result=con.fetchmany() #獲取多個結果
from django.db import connections
def data_bar(request):
    names, totals = [], []
    # connections['default'] <==> connection
    with connections['default'].cursor() as cursor:
        cursor.execute('select name, total from tb_agent t1 '
                       ' left outer join '
                       ' (select agentid, count(agentid) as total '
                       ' from tb_agent_estate group by agentid) t2 '
                       ' on t1.agentid = t2.agentid')
        for row in cursor.fetchall():
            names.append(row[0])
            totals.append(row[1])
    return JsonResponse({'x_data': names, 'y_data': totals})

============================================
pip install django -i https://pypi.doubanio.com/simple
pip install -U pip 更新pip

虛擬環(huán)境依賴項

1卒暂、將依賴項導出到文件requirment.txt
pip freeze > requirment.txt

2啄栓、將依賴項安裝到虛擬環(huán)境中
pip install requirment.txt

更改pip的配置文件
windows系統(tǒng)下的pip文件夾更改pip.ini ( cd C:\Users\Administrator\pip)
linux系統(tǒng)下.pip隱藏文件夾更改pip.conf (cd .pip)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市也祠,隨后出現(xiàn)的幾起案子昙楚,更是在濱河造成了極大的恐慌,老刑警劉巖诈嘿,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堪旧,死亡現(xiàn)場離奇詭異,居然都是意外死亡奖亚,警方通過查閱死者的電腦和手機淳梦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昔字,“玉大人爆袍,你說我怎么就攤上這事∽鞴” “怎么了陨囊?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夹攒。 經常有香客問我蜘醋,道長,這世上最難降的妖魔是什么咏尝? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任压语,我火速辦了婚禮,結果婚禮上编检,老公的妹妹穿的比我還像新娘胎食。我一直安慰自己,他們只是感情好蒙谓,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布斥季。 她就那樣靜靜地躺著训桶,像睡著了一般累驮。 火紅的嫁衣襯著肌膚如雪酣倾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天谤专,我揣著相機與錄音躁锡,去河邊找鬼。 笑死置侍,一個胖子當著我的面吹牛映之,可吹牛的內容都是我干的。 我是一名探鬼主播蜡坊,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼杠输,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秕衙?” 一聲冷哼從身側響起蠢甲,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎据忘,沒想到半個月后鹦牛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡勇吊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年曼追,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汉规。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡礼殊,死狀恐怖,靈堂內的尸體忽然破棺而出针史,到底是詐尸還是另有隱情膏燕,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布悟民,位于F島的核電站坝辫,受9級特大地震影響,放射性物質發(fā)生泄漏射亏。R本人自食惡果不足惜近忙,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望智润。 院中可真熱鬧及舍,春花似錦、人聲如沸窟绷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攘残,卻和暖如春拙友,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歼郭。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工遗契, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人病曾。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓牍蜂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泰涂。 傳聞我的和親對象是個殘疾皇子鲫竞,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 模塊間聯(lián)系越多,其耦合性越強逼蒙,同時表明其獨立性越差( 降低耦合性贡茅,可以提高其獨立性)。軟件設計中通常用耦合度和內聚...
    riverstation閱讀 2,070評論 0 8
  • 切換到創(chuàng)建項目的目錄 cd C:\Users\admin\Desktop\DjangoProject創(chuàng)建名為pr...
    在努力中閱讀 3,273評論 2 3
  • Django 準備 “虛擬環(huán)境為什么需要虛擬環(huán)境:到目前位置其做,我們所有的第三方包安裝都是直接通過 pip inst...
    33jubi閱讀 1,326評論 0 5
  • 一顶考、Django框架前言知識: 1、C/S和B/S的區(qū)別: C/S結構軟件:客戶端/服務端軟件妖泄,即客戶端要自己下載...
    月下獨酌123閱讀 4,531評論 0 36
  • 全文鏈接 第一章 創(chuàng)建一個blog應用第二章 使用高級特性來增強你的blog第三章 擴展你的blog應用第四章上 ...
    夜夜月閱讀 6,958評論 25 27