ÀÖÓãµç¾º


½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

Django ormµÄ»ù±¾Ê¹Ó÷½·¨Ö®Ò»

¸üÐÂʱ¼ä:2018Äê12ÔÂ13ÈÕ13ʱ35·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

ORM£¨ Object relational mapping ¶ÔÏó¹ØÏµÓ³É䣩
D£º°ÑÃæÏò¶ÔÏóÖеÄÀàºÍÊý¾Ý¿â±íÒ»Ò»¶ÔÓ¦ÆðÀ´£¬ÔÚdjangoÏîÄ¿ÓëÊý¾Ý¿âÖ®¼äÆð×ÅÇÅÁºµÄ                
    ½ÇÉ«
E£ºÍ¨¹ý²Ù×÷ÀàºÍ¶ÔÏ󣬶ÔÊý¾Ý¿â±íʵÏÖÊý¾ÝµÄÔöɾ¸Ä²éµÈ²Ù×÷£¬¶ø²»ÐèҪдSQLÓï¾ä
    Ê¹ÓÃORM¿ÉÒÔͨ¹ý·½±ãµÄÅäÖã¬Çл»Ê¹Óò»Í¬µÄÊý¾Ý¿â
U£º¢ÙʹÓÃdjango½øÐÐÊý¾Ý¿â¿ª·¢²½Ö裺
    1. ÔÚmodels.pyÖж¨ÒåÄ£ÐÍÀࣨÉú³É±íÃûΪӦÓÃÃû_Ä£ÐÍÀàÃûСд£©
2. Éú³ÉÇ¨ÒÆÎļþ£º python manage.DßÀpy makemigrations
3. Ö´ÐÐÇ¨ÒÆÉú³ÉÊý¾Ý¿â±í£¨Ä¬ÈÏʹÓÃsqlite3Êý¾Ý¿â£¬Éú³ÉµÄÊý¾Ý¿âÃûΪ£ºdb.sqlite3£©£º python manage.py migrate
4. °²×°sqliteman£ºsudo apt-get install sqliteman;Æô¶¯£ºsqliteman
5. ͨ¹ýÄ£ÐÍÀàºÍ¶ÔÏ󣬶ÔÊý¾Ý½øÐÐÔöɾ¸Ä²é

ͨ¹ýORM¶ÔÊý¾Ý¿âÔöɾ¸Ä£º
¿ÉÒÔ½øÈë½»»¥Ä£Ê½Ö´ÐдúÂ룺python manage.py shell
´´½¨Ä£ÐÍÀà¶ÔÏó£ºa = Ä£ÐÍÀࣨ£©
Ôö/¸Ä£ºa.save()   --------²»Ö¸¶¨idÔòĬÈÏʹÓÃÉÏÒ»´Îid£¬µÚÒ»´ÎΪ1£¬Èç¹ûÖ¸¶¨id£¬id²»´æ
                        ÔÚÔòÌí¼ÓÊý¾Ý£¬id´æÔÚÔòÐÞ¸ÄÊý¾Ý£¬Èçid =None,Ôòid=ÉÏÒ»´Îid+1
ɾ³ý£ºa.delete()  --------²»Ö¸¶¨id¼´É¾³ý±¾´Îid

×Ö¶ÎÊôÐÔ£¨¼´Êý¾Ý±íÖжÔÓ¦µÄ×ֶΣ©£º
ÊôÐÔÃû = models.×Ö¶ÎÀàÐÍ£¨×Ö¶ÎÏÞÖÆ£©  ------ÊôÐÔÃû²»¿ÉÒÔÓÃpython¹Ø¼ü×Ö¼°Ë«Ï»®Ïß
×Ö¶ÎÀàÐÍ£º
×Ö¶ÎÀàÐÍ ÀàÐͺ¬Òå ÃèÊö
AutoField ×Ô¶¯Ôö³¤µÄÕûÊý×ֶΠͨ³£²»ÐèÒªÖ¸¶¨£¬Django»á×Ô¶¯´´½¨ÊôÐÔÃûΪidµÄ×Ô¶¯Ôö³¤ÊôÐÔ
BooleanField ²¼¶û×ֶΠֵΪTrue»òFalse
NullBooleanField ¿Õ²¼¶û×Ö¶Î Ö§³ÖNull¡¢True¡¢FalseÈýÖÖÖµ¡£
CharField  ×Ö·û´®×Ö¶Î ±ØÐëÖ¸¶¨²ÎÊý£¨max_length=×Ö·û¸öÊý£©
TextField ´óÎı¾×Ö¶Î Ò»°ã³¬¹ý4000¸ö×Ö·ûʱʹÓÃ
DateField£¬TimeField£¬DateTimeField ÈÕÆÚ£¬ Ê±¼ä£¬ ÈÕÆÚʱ¼ä×Ö¶Î ¿ÉÖ¸¶¨²ÎÊýauto_now=False£¨True£º±£´æ¶ÔÏó£¬django×Ô¶¯Îª¸ÃÊôÐÔ¸³Öµ£¬Ä¬ÈÏΪFalse£©£»auto_now_add£¨True£ºµÚÒ»´Î´´½¨£¬django×Ô¶¯Îª¸ÃÊôÐÔ¸³Öµ£¬Ä¬ÈÏΪFalse£©
IntegerField ÕûÊý×Ö¶Î ´Ó -2147483648 µ½ 2147483647 ·¶Î§ÄÚµÄÖµÊǺϷ¨µÄ
DecimalField Ê®½øÖƸ¡µãÊý ±ØÐëÖ¸¶¨²ÎÊý£¨max_digit=×ÜλÊý£¬decimal_places=СÊýºóλÊý£©
FloatField ¸¡µãÊý ÓÃpythonÖеÄfloatÀ´±íʾ£¬ÓÐÎó²î
FileField ÉÏ´«Îļþ×Ö¶Î
ImageField ͼƬ×Ö¶Î ¼Ì³ÐÓÚFileField£¬¶ÔÉÏ´«µÄÄÚÈݽøÐÐУÑ飬ȷ±£ÊÇÓÐЧµÄͼƬ


×Ö¶ÎÑ¡Ï¼´Êý¾Ý±íÖÐ×Ö¶ÎÏÞÖÆ£©£º
Ñ¡Ïî ĬÈÏÖµ ÃèÊö ÊÇ·ñÒªÖØÐÂÇ¨ÒÆÐ޸ıí½á¹¹
null False True£ºÊý¾Ý¿âÖÐ×Ö¶ÎÔÊÐíΪ¿Õ ÊÇ
unique False True£ºÖµ±ØÐëΨһ ÊÇ
db_column ÊôÐÔÃû³Æ ×Ö¶ÎÃû£¬Èç¹ûδָ¶¨£¬ÔòʹÓÃÊôÐÔµÄÃû³Æ ÊÇ
db_index False True£ºÎª´Ë×ֶδ´½¨Ë÷Òý¡£ ²é¿´Ë÷Òý£ºshow index from ±íÃû ÊÇ
primary_key False True£ºÔò¸Ã×ֶλá³ÉΪģÐ͵ÄÖ÷¼ü×ֶΣ¬Ò»°ã×÷ΪAutoFieldµÄÑ¡ÏîʹÓà ÊÇ
default Ϊ×Ö¶ÎÉèÖÃĬÈÏÖµ ·ñ
blank False True£ºhtmlÒ³Ãæ±íµ¥Ñé֤ʱ×Ö¶ÎÔÊÐíΪ¿Õ ·ñ


ͨ¹ýORM²éѯÊý¾Ý¿â£º
objects£¨Ä£Ð͹ÜÀíÆ÷£©
D£ºÃ¿¸öÄ£ÐÍÀà¶¼ÓÐÒ»¸öobjectsµÄÀàÊôÐÔ£¬ÓÉdjango×Ö¶ÎÉú³É
E£º²éѯÊý¾Ý¿âµÄÊý¾Ý»ò¶ÔÊý¾Ý½øÐвÙ×÷´¦Àí


U£ºobjectsÖеķ½·¨£º
objects¹ÜÀíÆ÷Öеķ½·¨ ·µ»ØÀàÐÍ ×÷ÓÃ
Ä£ÐÍÀà.objects.get() Ä£ÐͶÔÏó ·µ»ØÒ»¸ö¶ÔÏó£¬ÇÒÖ»ÄÜÓÐÒ»¸ö: Èç¹û²éµ½¶àÌõÊý¾Ý£¬Ôò±¨£ºMultipleObjectsReturned Èç¹û²éѯ²»µ½Êý¾Ý£¬Ôò±¨£ºDoesNotExist
Ä£ÐÍÀà.objects.filter() QuerySet ·µ»ØÂú×ãÌõ¼þµÄ¶ÔÏó
Ä£ÐÍÀà.objects.all() QuerySet ·µ»ØËùÓеĶÔÏó
Ä£ÐÍÀà.objects.exclude() QuerySet ·µ»Ø²»ÂúÌõ¼þµÄ¶ÔÏó
Ä£ÐÍÀà.objects.order_by() QuerySet ¶Ô²éѯ½á¹û¼¯½øÐÐÅÅÐò
Ä£ÐÍÀà.objects.aggregate() ×ֵ䣬ÀýÈ磺{'salary__avg': 9500.0} ½øÐоۺϲÙ×÷ Sum, Count, Max, Min, Avg
Ä£ÐÍÀà.objects.count() Êý×Ö ·µ»Ø²éѯ¼¯ÖжÔÏóµÄÊýÄ¿


filter·½·¨
D£ºÄ£Ð͹ÜÀíÆ÷objectsµÄÒ»ÖÖ²éѯ·½·¨
E£ºÊµÏÖÌõ¼þ²éѯ£¬·µ»ØQuerySet¶ÔÏ󣬰üº¬ÁËËùÂú×ãÌõ¼þµÄÊý¾Ý
U£ºÄ£ÐÍÀà.objects.filter(Ä£ÐÍÀàÊôÐÔÃû__Ìõ¼þÃû = Öµ)
filterÌõ¼þ£º
Ìõ¼þ º¬Òå ×¢ÊÍ
exact ÅÐµÈ ¿ÉÒÔÊ¡ÂÔ
contains£» endswith£» startswith Ä£ºý²éѯ °üº¬£» ÒÔʲô¿ªÍ·£» ½áβ
isnull ¿Õ²éѯ ÊÇ·ñΪ¿Õ£¬ÊÇ·µ»ØTrue£¬·ñ·µ»ØFalse
in ·¶Î§²éѯ ÔÚ....ÄÚ
gt£¬lt£¬gte£¬lte ±È½Ï²éѯ ´óÓÚ£¬Ð¡ÓÚ£¬´óÓÚµÈÓÚ£¬Ð¡ÓÚµÈÓÚ
year£¬ date ÈÕÆÚ²éѯ Ä꣬ÈÕÆÚ


²éѯµÄÆäËû·½Ê½
·½·¨ ×÷Óà ʾÀý
F¶ÔÏó ÒýÓÃij×ֶεÄÖµ£¬¶Ô±È±íÖеÄÁ½¸ö×Ö¶Î ²éѯÓïÎÄ·ÖÊý´óÓÚÊýѧ·ÖÊýµÄѧÉú ³É¼¨±í.objects.filter(ÓïÎÄ__gt=F('Êýѧ'))
Q¶ÔÏó ×éºÏ¶à¸ö²éѯÌõ¼þ£¬Í¨¹ý£¨&£¬|£¬~£©½øÐÐÂß¼­²Ù×÷ Q£¨Ìõ¼þ1£©Âß¼­²Ù×÷·û Q(Ìõ¼þ2) 
order_by ¶Ô²éѯ½á¹û½øÐÐÅÅÐò£¨Ä¬ÈÏÉýÐò£© ÉýÐò£º Ä£ÐÍÀà.objects.order_by('×Ö¶ÎÃû') ½µÐò£º Ä£ÐÍÀà.objects.order_by('-×Ö¶ÎÃû')
aggregate ¾ÛºÏ²Ù×÷£¬¶Ô¶àÐвéѯ½á¹ûÖеÄÒ»ÁнøÐвÙ×÷£¬·µ»ØÒ»¸öÖµ¡£(ÓÐSum£¬Count£¬Max£¬Min£¬Avg) Ä£ÐÍÀà.objects.aggregate£¨¾ÛºÏÀࣨ'Ä£ÐÍÊôÐÔ'£©£© ·µ»ØÖµÊÇÒ»¸ö×ֵ䣬¸ñʽ£º {'ÊôÐÔÃû__¾ÛºÏº¯Êý': Öµ}
count ͳ¼ÆÂú×ãÌõ¼þµÄ¶ÔÏóµÄ¸öÊý£¬·µ»ØÖµÊÇÒ»¸öÊý×Ö Ä£ÐÍÀà.objects.count()


²é¿´ormÓï¾ä
´ò¿ªmysqld.cnf sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
ÖØÆômysql·þÎñ sudo service mysql restart
²é¿´mysqlÈÕÖ¾ÄÚÈÝ sudo tail -f /var/log/mysql/mysql.log


QuerySet²éѯ¼¯
D£ºµ÷ÓÃÄ£Ð͹ÜÀíÆ÷µÄall, filter, exclude, order_by·½·¨»á²úÉúÒ»¸öQuerySet
E£ºÏȹýÂ˵õ½¸Ã²éѯ¼¯»¹¿ÉÒÔµ÷ÓÃobjectsµÄ·½·¨²Ù×÷Êý¾Ý
U£º¢Ùȡϱê²Ù×÷£¨Ï±겻ÔÊÐí¸ºÊý£©£ºb[0]È¡³öQuerySetµÄµÚÒ»ÌõÊý¾Ý£¬Èç¹û²»´æÔÚÔò                
    Å×Òì³£
    ¢ÚÇÐÆ¬²Ù×÷£¨Ï±겻ÔÊÐí¸ºÊý£©£º²úÉúеÄQuerySet
    ¢Ûget£¨£©£ºÈ¡³öQuerySetµÄΨһһÌõÊý¾Ý£¬²»´æÔÚ»òÕß¶àÌõÔòÅ×Òì³£
    ¢Üexsit£¨£©£ºÅжÏÊÇ·ñÓÐÊý¾Ý
    ¢Ý¸Ä£¬É¾Êý¾Ý¿âÊý¾Ý£ºQuerySet¶ÔÏó.update(ÊôÐÔ1=Öµ1)£¬QuerySet.delete()
ÌØÐÔ£º¢Ù¶èÐÔ²éѯ£ºÖ»ÓÐÔÚʹÓÃQuerySetÖеÄÊý¾Ýʱ£¬²Å»áÈ¡²éѯÊý¾Ý¿âÖеÄÊý¾Ý
        ¢Ú»º´æ£ºµÚÒ»´Î±éÀúQuerySetÖеÄËùÓжÔÏó£¬django»á°ÑÊý¾Ý»º´æÆðÀ´£¬µÚ¶þ´ÎÔÙʹÓÃʱ»áʹ                
        Óûº´æ£¬²»»áÔٴβéѯ¡£

Ò»¶Ô¶à¹ØÁª²éѯ
ÓÉÒ»ÀàµÄÌõ¼þ²éѯ¶àÀàÊý¾Ý
1.   Ò»Àà¶ÔÏó = Ò»ÀàÀàÃû.objects.get(Ìõ¼þ)
    Ò»Àà¶ÔÏó.¶àÀàÀàÃûСд_set.all()
2.  ¶àÀàÀàÃû.objects.filter(Ò»ÀàÀàÃûСд__Ò»ÀàÊôÐÔÃû__Ìõ¼þ = Öµ)

ÓɶàÀàµÄÌõ¼þ²éѯһÀàÊý¾Ý
1.   ¶àÀà¶ÔÏó = ¶àÀàÀàÃû.objects.get(Ìõ¼þ£©
    ¶àÀà¶ÔÏó.¹ØÁªÊôÐÔ
2.   Ò»ÀàÀàÃû.objects.filter(¶àÀàÀàÃûСд__¶àÀàÊôÐÔÃû__Ìõ¼þ =Öµ )

×Ô¹ØÁª
D£ºÊÇÒ»ÖÖÌØÊâµÄÒ»¶Ô¶à¹ØÏµ
U£º×Ô¹ØÁª¹ØÁªÊôÐÔ¶¨Ò壺¹ØÁªÊôÐÔ = models.ForeignKey('self')

×Ô¶¨ÒåÄ£Ð͹ÜÀíÆ÷
D£ºÔÚÄ£ÐÍÀàÖÐ×Ô¶¨ÒåÄ£Ð͹ÜÀíÆ÷£¬×Ô¶¨Òåºó£¬Django½«²»ÔÙÉú³ÉĬÈϵÄobjects
E£º ¹¦ÄÜ1£ºÐ޸ĹÜÀíÆ÷·µ»ØµÄԭʼ²éѯ¼¯
    ¹¦ÄÜ2£ºÔÚ¹ÜÀíÆ÷ÀàÖÐÌí¼Ó¶îÍâµÄ·½·¨£¬°ïÖúÎÒÃDzÙ×÷Ä£ÐÍÀà¶ÔÓ¦µÄÊý¾Ý±í£¬¼õÇáÊÓ
                    ͼº¯ÊýÖеĴúÂëÁ¿£¬Ö÷Òª×öÂß¼­´¦Àí¡£
U£º¢ÙÔÚviews´´½¨Ò»¸ö×Ô¶¨ÒåÄ£Ð͹ÜÀíÆ÷À࣬¼Ì³ÐManager
    ¢ÚÖØÐ´¸¸ÀàµÄ·½·¨Ð޸ĹÜÀíÆ÷·µ»ØµÄԭʼ²éѯ¼¯
    ¢Û°Ñ²Ù×÷Êý¾Ý¿âµÄ´úÂëʵÏÖ·â×°µ½Ä£Ð͹ÜÀíÆ÷µÄ·½·¨ÖУ¬·µ»ØÄ£ÐÍÀà¶ÔÏó
    ¢ÜÔÚÔ­Ä£ÐÍÀàÖУºobjects=×Ô¶¨ÒåÄ£Ð͹ÜÀíÆ÷ÀàÃû()    ʵÏÖ¹¦ÄÜ1
    ¢ÝÔÚÊÓͼº¯ÊýÖе÷ÓÃobjects.¢ÛµÄ·½·¨Ãû()   ¿ÉʵÏÖ¹¦ÄÜ2

×÷ÕߣºÀÖÓã²¥¿ÍÈ˹¤ÖÇÄÜ+PythonÅàѵѧԺ
Ê×·¢£ºhttp://python.itcast.cn/
0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿