django之ORM分库、读写分离、性能、原生sql补充

orm性能相关

  1. 尽量不查对象,能用values()

  2. select_related('classes') 连表查询 多对一 一对一

  3. prefetch_related('classes') 子查询 多对一 多对多

  4. only('name') 指定某些字段 defer 指定排除某些字段

queryset 特性

多个数据库

配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'db2': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
    },
}

迁移其他的数据库

python manage.py migrate --database db2

读写分离

手动

models.Student.objects.using('db2').all()

obj = models.Student.objects.using('db2').get(name='zhazha')
obj.name = 'star'
obj.save(using='default')

自动

settings配置:

DATABASE_ROUTERS = ['myrouter.Router']
class Router:
    """
    读写分离

    """

    def db_for_write(self, model, **kwargs):
        return 'db2'

    def db_for_read(self, model, **kwargs):
        return 'default'

一主多从

class Router:
    """
    一主多从
    """

    def db_for_write(self, model, **kwargs):
        return 'db1'

    def db_for_read(self, model, **kwargs):
        return random.choices['db2', 'db3', 'db4']

分库分表

class Router:
    """
    分库分表

    app01  model   db1
    app02  model   db2
    """

    def db_for_write(self, model, **kwargs):
        app_name = model._meta.app_label
        if app_name == 'app01':
            return 'db1'
        elif app_name == 'app02':
            return 'db2'

    def db_for_read(self, model, **kwargs):
        app_name = model._meta.app_label
        if app_name == 'app01':
            return 'db1'
        elif app_name == 'app02':
            return 'db2'

django执行原生SQL的方法

# 1. extra

ret = models.Student.objects.all().extra(where=['id > %s'], params=['1'], order_by=['-id'])
# print(ret)
# for i in ret:
#     print(i)


# 2. raw

ret = models.Student.objects.raw('select * from main.app01_classes where id <= 2')
print(ret)
for i in ret:
    print(i.name)

# 3 connection
from django.db import connection, connections

# cursor = connection.cursor()
cursor = connections['db2'].cursor()
cursor.execute("""SELECT * from main.app01_classes where id > %s""", [1])
row = cursor.fetchall()
print(row)

版权声明:除特别注明外,本站所有文章均为王晨曦个人站点原创

转载请注明:出处来自王晨曦个人站点 » django之ORM分库、读写分离、性能、原生sql补充

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. Garfaurb 说道:

    canada pharmacy micron filter for amiodarone https://globalnass.ru/review-of-cialis-super-force/ playboya gemeinschaft https://www.tnsfc.co.uk/2017/06/25/wpl-interviews-scott-ruscoe/ canadian pharmacy ketorolac espanol canada pharmacy zide effects of tapazole http://ojeludke.ru/kishechnik/disbakterioz.php geographer reflejar http://psy-help-rostov.ru/statya-vliyanie-emotsiy-na-zabolevanie/ canada pharmacy besivance bacterial keratitis dosage canada pharmacy elocon cream 0.1by shearing http://hotabpw.ru/contact/index.html metallics

  2. rozluka cialis manufacturer ciascun cialis doses cialis for bph dosage - order cialis online [url=https://cialis-otc.com]cialis on line australia[/url] snippy buying cialis in canada

  3. leno shelf life of liquid tadalafil plumberq who invented tadalafil where can i buy cialis in the uk - what are the side effects of tadalafil [url=https://ciatadgen.com]buy cialis canada[/url] entere cialis tadalafil

  4. opowiadacza cialis at costco repressione best place to buy liquid tadalafil buy tadalafil online - order cialis 20mg [url=https://ciatadgen.com]comprar tadalafil 40 mg en walmart sin receta houston texas[/url] daytonman real cialis sublingual

  5. cialis free 说道:

    kediri cialis online without a prescription kilogrami tadalafil 20 mg how long does it last best price for cialis - cialis cost in nz [url=https://ciatadgen.com]cialis prices in ontario[/url] jackzonville buy cialis generic

  6. Sarfaurb 说道:

    canadian pharmacy ondansetron hcl 8 mg tablet https://elsu.ru/user/Wagsom/ provocador curriculums http://springmountainadventures.com/2019/10/08/2019-wmgk-big-bad-bonfire-spring-mountain/ canadian pharmacy desvenlafaxine 100 mg. tablet look like canada pharmacy stromectol: oral tablet (3mg) package 4 tabs http://pion.ch/Bug/dilu05.php lido prawi https://zhilexue.tech/space-uid-33981.html canada pharmacy metformin causes cancer canadian pharmacy wigetta es real luzu https://svarka31professional.ru/preimushhestva-pokupki-lekarstv-onlajn-udobstvo-ekonomiya-i-bezopasnost/ maciunas

  7. nlad 36 hour cialis ovim cost of cialis 20mg cialis tadalafil - where to buy generic cialis? [url=https://cialis-otc.com]tadalafil 20[/url] kalven cialis coupon free trial

  8. Sarfaurb 说道:

    canadian pharmacy latanoprost lumigan https://afterpad.com/forums/viewtopic.php?pid=395505#p395505 durchbricht antoncic https://vfmdirect.proboards.com/thread/1243/canadian-pharmacy-online canadian pharmacy cordarone pregnancy category canadian pharmacy benicar 40 milligram tab accidental overdose https://vfmdirect.proboards.com/thread/1243/canadian-pharmacy-online justifier episoder https://www.janubaba.com/c/forum/topic/246455/Teen_Talk/Buying_medicine canadian pharmacy topical isotretinoin canadian pharmacy how to use benicar http://foroexplayate.com/phpBB3/viewtopic.php?f=62&t=64553 alumbrados

  9. Zarfaurb 说道:

    canadian pharmacy what is desvenlafaxine used for https://psychedelic.ru/news/5287-kak-uvelichit-muzhskuyu-silu-effektivnye-sposoby-i-rekomendatsii ruimten dissimuler https://joomlamoduli.ru/aripiprazole-a-complete-handbook/ canada pharmacy pristiq side effects go away canada pharmacy carafate equivalent https://replit.com/@canadapharmacyu milli plaszczymoze https://vsenarodnaya-medicina.ru/the-advantages-of-cialis-every-day/ canada pharmacy shellfish allergy and iodine canadian pharmacy ondansetron long-term use https://bng.cialis-otc.com bystander

  10. Winfaurb 说道:

    drug dymista https://www.tumblr.com/julianafa/ taipei metro orange line luzu line 100 minocin bid, photosensitivity, first two days once a day, then bid https://www.checkli.com/cenforce ciclopirox topical solution 8 before and after calcitonin increases https://www.twitch.tv/julianapriligy/about otc compazine emla gel walmart https://devpost.com/fiprogit ribociclib pathway timolol adsorption area https://www.linqto.me/about/julianafar cialis 20mg online msn messenger

  11. cialis 20mg review 说道:

    psnpal cialis tadalafil 20 mg precio skaidrs tadalafil vardenafil cialis black brand - paypal cialis tadalafil [url=https://buyciaonl.com]cialis going generic[/url] astary canadian tadalafil 20mg

  12. stabilizes tadalafil eli furiously online pharmacy tadalafil cheap brand cialis 20 mg - cialis 10mg price [url=https://buyciaonl.net]us pharmacy cialis[/url] fraisat cialis cheap

  13. directi cialis trial coupon batissent how much cialis can you take ambrisentan and tadalafil combination brands - order cialis online [url=https://buyciaonl.net]cialis 5mg tablets[/url] jurij cialis 20 mg tablets

  14. rui tadalafil 说道:

    bloomberg cheap tadalafil 10mg palasites is there a generic cialis available in the us difference between tadalafil and cialis - cheap original cialis [url=https://cialis-otc.com]cialis coupon online[/url] buyercarmel 20 mg tadalafil best price

  15. vomitory cialis for sale online ormy chemone research tadalafil cialis back pain - cialis great price [url=https://canadapharmacy-usa.net]generic cialis tadalafil 40 mg[/url] convient buy cialis in davenport fl

  16. generic cialis 说道:

    realmente cialis no prescription derdejaars black cialis prices on cialis - how often can i take cialis 20mg [url=https://cialis-otc.com]buy some cialis[/url] tsentral generic cialis for sale

  17. gastos buy cialis through paypal pasniedzeju how long before sex should i take cialis tadalafil wiki - buy cialis pro [url=https://canadapharmacy-usa.net]comprar tadalafil 5mg[/url] vecernja purchase cialis with paypal

  18. chieh cialis oline pembaruan tadalafil research liquid how tadalafil works - tadalafil indications [url=https://canadapharmacy-usa.net]cialis doesnt work for me[/url] prestizs cialis tablets tadalafil

  19. Linfaurb 说道:

    ГЎcido salicГ­lico malo para la piel https://www.producthunt.com/@vladimir_stefanowsky medicamento para la presiГіn alta hidroclorotiazida dosis de propranolol para ansiedad https://www.linqto.me/about/mikolastefanows infusiГіn intravenosa de nimodipina cordarone para quГ© sirve https://www.mapleprimes.com/users/mikolastefanows ВїdГіnde puedo conseguir betadine? dosis inicial de metimazol https://www.producthunt.com/@vladimir_stefanowsky olmesartan bugiardino minociclina artritis reumatoide https://qiita.com/mikolastefanowsky Вїla ziana decolora tu piel?

  20. Binfaurb 说道:

    combien de temps faut-il a dymista pour agir https://www.behance.net/pharmacieadele site:goascribe.com approuve farmacia stromectol pas cher comment utiliser la creme a la tretinoine avec un hydratant https://devpost.com/pharmacieadele90 couverture medicare de dymista prix de la tretinoine sans assurance https://bikeindex.org/users/mirourqxriujdw2zqswxqq dymista et huile d'onagre peut-on obtenir de la creme emla sans ordonnance https://www.myminifactory.com/users/Pharmacieadele site:goascribe.com approuve farmacia stromectol pas cher diovan vs benicar et cheveux https://www.myminifactory.com/users/Pharmacieadele azelastine 0,1 137 mcg spry