ä»¥æ¥æžãããŠããŸã å¥ã®Holivarã¯ãé«è² è·ãããžã§ã¯ãïŒHLïŒã®SQL vs ORMã«é¢ããã³ã¡ã³ãã«ç»å ŽããŸãã
åæ
ã¡ã¢ã§ã¯ãããã€ãã®å Žæã§ãããµãããã®ãèŠã€ããããšãã§ããŸãã ãããã®ã»ãšãã©ã¯ããã¥ã¡ã³ãã§å©çšã§ããŸãããçŸä»£äººã¯ãã°ãã°è¡šé¢çã«ãã¹ãŠãæã«å
¥ãããã§ãã ã¯ãããããŠå€ãã¯åã«HLãããžã§ã¯ãã§èªåèªèº«ããã¹ãããæ©äŒãæã£ãŠããŸããã§ããã
ãã®èšäºãèªãã§ãããšããèŠããŠãããŠãã ããïŒ
- ORMã1åæäœããã ãã§HLãããžã§ã¯ããå®è£
ããããšã¯ã§ããŸãã
- è€éãªãã®ãããŒã¿ããŒã¹ã®è©ã«çœ®ããŠã¯ãããŸããã éä¹ãã«ãŠã³ãããã®ã§ã¯ãªããæ
å ±ãä¿åããããã«å¿
èŠã§ãïŒ
- åçŽãªORMããŒã«ã䜿çšããŠèå³ã®ããã¢ã€ãã¢ãå®çŸã§ããªãå Žåã¯ãORMã䜿çšããŠåé¡ãçŽæ¥è§£æ±ºããªãã§ãã ããã ãããŠããã«äœãã¬ãã«ã«ç»ããªãã§ãæŸèæãå£ããŸãã ãããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãèŠã€ããŠãã ããã
- èšäºã®mç¬çãªãŠãŒã¢ã©ã¹ãªããŒã³ã§ããããªããã ããã§ãªããã°éå±:)
- ãã¹ãŠã®æ
å ±ã¯DjangoããŒãžã§ã³1.3.4ã«åºã¥ããŠããŸã
- ãã£ãšæ¥œã«ïŒ
ãããŠããããŠããããŠãã¯ãããã®èšäºã¯ã3幎以äžã®Djangoã§ã®äœæ¥ã§ééããORMã®çè§£ã®èª€ãã瀺ããŸãã
çè§£ãããŠããªãORM
ç§ã¯ããªãé·ãéç§ãæ©ãŸããŠããå€å
žçãªééãããå§ããŸãã ãŠã«ã°ã¢ã€ç¿ã®éšæã®ä¿¡ä»°ã«ã€ããŠã Django ORMã®å
šèœæ§ãã€ãŸã
Klass.objects.all()
äŸãã°ïŒ
all_result = Klass.objects.all() result_one = all_result.filter(condition_field=1) result_two = all_result.filter(condition_field=2)
ç§ã®å€¢ã§ã¯ã次ã®ããã«èããŠããŸããã
- ç§ã¯ãæåã®è¡ã§1åã®ãªã¯ãšã¹ãã§ãèå³ã®ãããã®ããã¹ãŠéžæããŸããã
- 2è¡ç®ã§ã¯ããªã¯ãšã¹ãã¯ãããããŸããããæåã®æ¡ä»¶ã§çµæãåŠçããŸãã
- 3è¡ç®ã§ã¯ãããŒã¿ããŒã¹ãžã®ã¯ãšãªããããŸããããŸããæåã®ã¯ãšãªã®çµæã«åºã¥ãã2çªç®ã®æ¡ä»¶ã§é¢å¿ã®ããåºåãååŸããŸãã
ãããããéæ³ã®ç¿ã¯ããªããšæšæž¬ããŠããã§ãããããã®å Žåã3ã€ã®ã¯ãšãªããããŸãã ããããç§ã¯ããªãã倱æãããŸãã ãã®å Žåãããã«2ã€ã®ã¯ãšãªããããããã«æ£ç¢ºã«èšããšããã®ã¹ã¯ãªããã®çµæã«åºã¥ããã¯ãšãªã¯1ã€ã§ã¯ãããŸããïŒãã¡ãããå°æ¥çã«ã¯ããã¯ãªããŸããïŒã ãªãã§ããïŒ
é çªã«èª¬æããŸãã ãã®ã³ãŒãã«ã¯3ã€ã®ã¯ãšãªãããããšã蚌æããŸãããã
ãã£ãïŒ 3ã€ã®ãªã¯ãšã¹ããããããšã蚌æããŸããã ããããäž»ãªãã¬ãŒãºã¯ãèšç®ã§ãã§ãã å®éã2çªç®ã®éšåãã€ãŸããªã¯ãšã¹ãã2ã€ãããªãããšã®èšŒæã«ç§»ããŸãã
ãã®åé¡ã§ã¯ã次ã®ORMã®çè§£ïŒ2æïŒã圹ç«ã¡ãŸãã
- ãããŸã§ã®ãšãããäœãèšç®ããŠããŸãããORMããŒã«ã䜿çšããŠãªã¯ãšã¹ããäœæããã ãã§ãã èšç®ãéå§ãããšããã«ãçæããããªã¯ãšã¹ããåä¿¡ããŠââèšç®ããŸãã
ãããã£ãŠãæåã®è¡ã§ã¯ãé¢å¿ã®ããã¯ãšãªã§å€æ°
all_resultãæå®ããŸãã-ãã¹ãŠéžæããŸãã
2è¡ç®ãš3è¡ç®ã§ã远å ã®éžæã®ãªã¯ãšã¹ããæå®ããŸãã æ¡ä»¶ã ããŠããããã£ãŠã2ã€ã®èŠæ±ãåãåããŸããã ã©ã¡ãã蚌æãã¹ãã
æ°é
ãã®ããèªè
ïŒåã®æ®µèœãããäžåºŠèŠãã®ã¯ãªãã§ããïŒïŒãªã¯ãšã¹ããããŠããªãããšããã§ã«æšæž¬ããŠããã¯ãã§ãã ãããŠã2è¡ç®ãš3è¡ç®ã§ã¯ãåæ§ã«é¢å¿ã®ãããªã¯ãšã¹ããäœæããŸããããããŒã¿ããŒã¹ã«é£çµ¡ããŸããã§ããã
ã ããç§ãã¡ã¯ãã³ã»ã³ã¹ãããŠããã ãããŠãèšç®ã¯ãäŸãã°ãäžæµã®ã³ãŒãã®æåã®è¡ããå§ãŸããŸãïŒ
for result in result_one: print result.id
å¿
ãããå¿
èŠãªæ©èœãšåççãªéžæã§ã¯ãªã
ãã³ãã¬ãŒããšãäžéšã®äººã
ã
æããŠãã
__unicode __ïŒïŒé¢æ°
ã詊ããŠã¿ãŸãããã
ããªããç¥ã£ãŠãã-ã¯ãŒã«ãªæ©èœïŒ ã©ãã§ãããã€ã§ããã©ããªç¶æ³ã§ããèå³ã®ããååãååŸã§ããŸãã ãããïŒ ãããŠããããŸã§ã¯ãåºåã«
ForeignKeyã衚瀺ããããŸã§ã 衚瀺ããããããã«ããã¹ãŠããªããªã£ãããšãèæ
®ããŠãã ããã
å°ããªäŸãèããŠã¿ãŸãããã ãã¥ãŒã¹ã¯1è¡ã§ãç¥ããããŸãã ãã®ãã¥ãŒã¹ãé¢é£ä»ããããŠããå°åããããŸãã
class RegionSite(models.Model): name = models.CharField(verbose_name="", max_length=200,) def __unicode__(self): return "%s" % self.name class News(models.Model): region = models.ForeignKey(RegionSite, verbose_name="") date = models.DateField(verbose_name="", blank=True, null=True, ) name = models.CharField(verbose_name="", max_length=255) def __unicode__(self): return "%s (%s)" % (self.name, self.region)
Newsã§å®çŸ©ãããŠããååã§ãææ°ã®10åã®ãã¥ãŒã¹ãå°å·ããå¿
èŠããããŸã
ã.__ unicode __ïŒïŒè¢ãéããŠãæžããŠãã ããïŒ
news = News.objects.all().order_by("-date")[:10]
ãã³ãã¬ãŒãå
ïŒ
{% for n in news %} {{ n }} {% endfor %}
ãããŠãããã§èªåãã¡ã®ããã«ç©ŽãæããŸããã ããããã¥ãŒã¹ã§ã¯ãªãå ŽåããŸãã¯10åã§ã¯ãªã1äžåããå Žåã¯ã10,000ä»¶ã®ãªã¯ãšã¹ã+ 1ãåä¿¡ãããšããäºå®ã«åããŠãã ããããã¹ãŠã¯
ForeignKey mudbloodã«ãããã®ã§ãã
äœåãª1äžä»¶ã®ã¯ãšãªã®äŸïŒå°ããªã¢ãã«ããæã¡ããã ãããããšãããããŸã-ãã¹ãŠã®ãã£ãŒã«ããšã¢ãã«å€ã¯ã10ãŸãã¯50ãã£ãŒã«ãã§ãã£ãŠãããã®æ¹æ³ã§éžæãããŸãïŒïŒ
SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` = 1 SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` = 1 SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` = 2 SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` = 1
ãªããããèµ·ãã£ãŠããã®ã§ããïŒ ãã¹ãŠãæ§åšã«ç°¡åã§ãã ãã¥ãŒã¹ã®ååãååŸãã
ãã³ã«ã
__ unicode __ïŒïŒå€ãè¿ãããã«
RegionSiteã«èŠæ±ãããã¥ãŒã¹ã®å°åã®ååã衚瀺ããããã«æ¬åŒ§ã§çœ®ãæããŸãã
åæ§ã«ãããšãã°ORMã䜿çšãããã³ãã¬ãŒãã§ãããšãã°æ¬¡ã®ããã«å¿
èŠãªå€ã«å°éããããšãããšãæªãç¶æ³ãå§ãŸããŸãã
{{ subgroup.group.megagroup.name }}
é£ããèŠæ±ããããããããªããšã¯æããªãã§ããã:)ãã³ãã¬ãŒãã«ãã®ãããªãµã³ãã«ãäœååãå«ããããšãã§ãããšã¯èšã£ãŠããŸããïŒ
ããªãã¯ããŸãç§ãã¡ãé£ããŠè¡ããªãã§ããã-ç§ãã¡ã¯
ãããæ³£ã ãORMã®æ¬¡ã®çŽ æŽãããæ©äŒã
å©çšããŸãã-.valuesïŒïŒ ã
éæ³ã®ããŒããŒãã®ãããªã³ãŒãè¡ã¯æ¬¡ã®ããã«ãªããŸãã
news = News.objects.all().values("name", "region__name").order_by("-date")[:10]
ãã³ãã¬ãŒãïŒ
{% for n in news %} {{ n.name }} ({{ n.region__name }}) {% endfor %}
äºéã¢ã³ããŒã¹ã³ã¢ã«æ³šæããŠãã ããã ããã«åœ¹ç«ã€ã§ãããã ïŒç¥ããªã人ã®ããã«-äºéäžç·ãã€ãŸããã¢ãã«éã®æ¥ç¶ã倧ãŸãã«èšã£ãŠïŒ
ãããã®ç°¡åãªæäœã«ããã1äžä»¶ã®ãªã¯ãšã¹ããåãé€ãã1ä»¶ã®ãªã¯ãšã¹ãã®ã¿ãæ®ããŸããã ãšããã§ãã¯ããJOINããã³éžæãããã£ãŒã«ãã§åäœããŸãïŒ
SELECT `news_news`.`name`, `seo_regionsite`.`name` FROM `news_news` INNER JOIN `seo_regionsite` ON (`news_news`.`region_id` = `seo_regionsite`.`id`) LIMIT 10
ãšãŠãããããã§ãïŒ çµå±ã®ãšãããç§ãã¡ã¯ORMãªããã£ãã€ã¶ãŒã«ãªããŸãã:) ãç¥ããããŸã:)ãã®æé©åã¯ããã¥ãŒã¹ã1äžä»¶ã«ãªããŸã§ã®æé©åã§ãã ããããç§ãã¡ã¯ãã£ãšéããããè¡ãããšãã§ããŸãïŒ
ãããè¡ãã«ã¯ããªã¯ãšã¹ãã®æ°ã«é¢ããåèŠãèæ
®ãããªã¯ãšã¹ãã®æ°ãç·æ¥ã«2åã«å¢ãããŠãã ããïŒ ã€ãŸããããŒã¿ãæºåããŸãã
regions = RegionSite.objects.all().values("id", "name") region_info = {} for region in regions: region_info[region["id"]] = region["name"] news = News.objects.all().values("name", "region_id").order_by("-date")[:10] for n in news: n["name"] = "%s (%s)" % (n["name"], region_info[n["region_id"]])
ãããŠãæ°ããèšå®ãã倿°ã®ãã³ãã¬ãŒãã®åºåïŒ
{% for n in news %} {{ n.name }} {% endfor %}
ã¯ããããããŸãã...ãããã®è¡ã§ã¯ãMVTã®æŠå¿µã«éåããŸããã ãã ããããã¯åãªãäŸã§ãããMVTæšæºã«éåããªãè¡ã«ç°¡åã«å€æã§ããŸãã
ç§ãã¡ã¯äœãããŸãããïŒ
- å°åã«é¢ããããŒã¿ãæºåãããããã«é¢ããæ
å ±ãèŸæžã«å
¥åããŸããã
SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite`
- ãã¥ãŒã¹ããéžæãããã®ã¯ãç§ãã¡ãèå³ãæã£ãŠãããã®ãã¹ãŠã«å ããŠãåäžã®äžç·ã«æ³šæãæããŸãã
SELECT `news_news`.`name`, `news_news`.`region_id` FROM `news_news` LIMIT 10
ããŒã¿ããŒã¹å
ã®ãªã³ã¯ã®çŽæ¥çãªæå³ãéžæããã®ã¯ãåäžã®äžç·ã§ãã - 2ã€ã®ã¢ãã«ãpythonã§æ¥ç¶ããŸããã
ç§ãä¿¡ããŠãåäžã®ForeignKeysã§ã¯ãé床ã®å¢å ã«ã»ãšãã©æ°ä»ããªãã§ãããïŒç¹ã«éžæå¯èœãªãã£ãŒã«ããå°ãªãå ŽåïŒã ãã ããã¢ãã«ãè€æ°ã®ã¢ãã«ãšã®éé ãéããŠéä¿¡ããå Žåãããããã®æ±ºå®ã®ãç¥ãã®å§ãŸãã§ãã
äºéäžç·ãšåäžäžç·ã«æ©ãŸããç¶ããŸãããã
ãããªãã£ã®ãã€ã³ãã«ç°¡åãªäŸãèããŠã¿ãŸãããïŒ
item.group_id vs. item.group.id
ã¯ãšãªãäœæãããšãã ãã§ãªããçµæãåŠçãããšãã«ãããã®æ©èœãå®è¡ã§ããŸãã
äŸïŒ
for n in News.objects.all(): print n.region_id
ãªã¯ãšã¹ãã¯1ã€ã ãã§ã-ãã¥ãŒã¹ãéžæãããšã
äŸ2ïŒ
for n in News.objects.all(): print n.region.id
ãªã¯ãšã¹ãã¯1äž+ 1ã«ãªããŸãã åå埩ã§ãidã®ãªã¯ãšã¹ãããããŸãã åæ§ã«ãªããŸãïŒ
SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` = 1
ããã¯ã1ã€ã®èšå·ã«ãããã®ãããªéãã§ãã
çŸåšãå€ãã®é«åºŠãªdzhangovodyãç§ã®ã³ãŒãã§Voodoo人圢ãæããŠããŸãã ãããŠåæã«ã圌ãã¯ç§ã«è³ªåãããŸã-ããŒã¿æºåã§ããªã¶ãŒãã®ããã«äœãããŠããŸããããããŠã
values_listïŒ "id"ãflat = TrueïŒã¯ã©ãã«ãããŸããïŒ
value_listã䜿çšããéã®æ£ç¢ºæ§ã®å¿
èŠæ§ã瀺ãçŽ æŽãããäŸã
èŠãŠã¿ãŸãããã
regions_id = RegionSite.objects.filter(id__lte=10).values_list("id", flat=True) for n in News.objects.filter(region__id__in=regions_id): print n.region_id
ãããã®ã³ãŒãè¡ã䜿çšããŠã次ã®ããšãè¡ããŸãã
- ããã€ãã®æœè±¡çãªæ¡ä»¶ã«ãã£ãŠãé¢å¿ã®ããå°åã®id-shnikã®ãªã¹ããæºåããŠããŸãã
- çµæã®çµæããã¥ãŒã¹ã¯ãšãªã«æ¿å
¥ãããæ¬¡ã®çµæãåŸãããŸãã
SELECT `news_news`.`id`, `news_news`.`region_id`, `news_news`.`date`, `news_news`.`name` FROM `news_news` WHERE `news_news`.`region_id` IN (SELECT U0.`id` FROM `seo_regionsite` U0 WHERE U0.`id` <= 10 )
ãªã¯ãšã¹ãã§ãªã¯ãšã¹ãïŒ Uuuuhãç§ã¯å€§å¥œãã§ã:)ç¹ã«ãINïŒ10,000 IDïŒã®åã蟌ã¿selectã§10,000ãã¥ãŒã¹ãéžæããŸã
ãããäœãè
ããã®ã確ãã«çè§£ããŠããŸããïŒ :)ããã§ãªãå Žå-ãã®åŸãçè§£-äœãã絶察ã«è¯ãäœãïŒ
ãã®åé¡ã®è§£æ±ºçã倩æã·ã³ãã«ã§ãã èšäºã®åé ãæãåºããŠãã ãã-倿°ãè©äŸ¡ããªããšã¯ãšãªã¯è¡šç€ºãããŸããã ãããŠãããšãã°ãã³ãŒãã®2è¡ç®ã«ã³ã¡ã³ããä»ããŸãã
for n in News.objects.filter(region__id__in=list(regions_id)):
ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ã2ã€ã®åçŽãªã¯ãšãªãååŸããŸãã æ·»ä»ãªãã
ããªãã¯ãŸã ç§ãã¡ã®ããã«åºã«ããããã§ãªãORMããæ¯ãããŠããŸãããïŒ ãã®åŸãããã«æ·±ãããããããŸãã ã³ãŒããèæ
®ããŠãã ããïŒ
regions_id = list(News.objects.all().values_list("region_id", flat=True)) print RegionSite.objects.filter(id__in=regions_id)
ãããã®2è¡ã§ããã¥ãŒã¹ã®ããå°åã®ãªã¹ããéžæããŸãã ãã®ã³ãŒãã®ãã¹ãŠã¯ã1ã€ã®ãã€ã³ããã€ãŸãçµæã®ãªã¯ãšã¹ããé€ããŠçŽ æŽããããã®ã§ãã
SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` IN (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9) LIMIT 21
ãã¯ã¯ãORMããããŠïŒ äœããŠãã®ïŒ
ããã ãã§ãªãããã¹ãŠã®ãã¥ãŒã¹ïŒãã®äŸã§ã¯256åã®ããã§ãïŒããã圌ã¯ãªãŒãžã§ã³ã®IDãéžæããããããåã«çœ®æããã®ã§ãã©ããããå¶é21ãååŸããŸãããç§ã¯å¥ã®èšãèš³ãèŠã€ããŸããã§ããïŒãããããããã«äŸ¡å€ããããšæããã«åŸ
ã¡äŒãããããŸãã
åã®äŸã®ããã«ã解決çã¯ç°¡åã§ãã
print RegionSite.objects.filter(id__in=set(regions_id)).values("id", "name")
setïŒïŒã䜿çšããŠäœåãªèŠçŽ ãåé€ãããšãäºæ³ã©ãããéåžžã«é©åãªãªã¯ãšã¹ããåãåããŸããã
SELECT `seo_regionsite`.`id`, `seo_regionsite`.`name` FROM `seo_regionsite` WHERE `seo_regionsite`.`id` IN (1, 2, 3, 4, 9) LIMIT 21
誰ãã幞ãã§ã誰ãã幞ãã§ãã
æŽå²çã«æžãããã³ãŒããå°ãèŠãªãããç¥ã£ãŠããã¹ãå¥ã®ãã¿ãŒã³ã匷調ããŸãã ãããŠåã³ããµã³ãã«ã³ãŒãïŒ
region = RegionSite.objects.get(id=1) t = datetime.datetime.now() for i in range(1000): list(News.objects.filter(region__in=[region]).values("id")[:10]) # list(News.objects.filter(region__id__in=[region.id]).values("id")[:10]) # list(News.objects.filter(region__in=[1]).values("id")[:10]) # list(News.objects.filter(region__id__in=[1]).values("id")[:10]) print datetime.datetime.now() - t
åå埩è¡ã¯é çªã«å«ãŸããŠããŸããïŒ1ã€ã ããæ©èœããããã«ïŒã åèšã§ãæ¬¡ã®æŠæ°ãååŸã§ããŸãã
- 1è¡-6.362800ç§
- 2è¡ç®-6.073090ç§
- 3è¡ç®-6.431563ç§
- 4è¡ç®-6.126252ç§
å·®ç°ã¯æå°éã§ãããç®ã«èŠããŸãã åªå
ããã2ããã³4ãªãã·ã§ã³ïŒäž»ã«4mã䜿çšïŒã æéã®äž»ãªç¡é§ã¯ããªã¯ãšã¹ããäœæããéãã§ãã äºçްã§ãããéèŠã ãšæããŸãã èªè
ã¯ããããç¬ç«ããŠçµè«ãââåºããŸãã
ãããŠãç§ãã¡ã¯æãèšèã§ãã®èšäºãçµãããŸãã
ç¹å¥ãªå ŽåïŒ
- InnoDBããããŸã
- ããŒãã«å
ã®ããŒã¿ãæŽæ°ããå¿
èŠããããŸãããã®ããŒãã«ã§ã¯ãé¡§å®¢ã¯æžã蟌ã¿ããããèªã¿åãã®ã¿ãè¡ããŸãïŒååã®ãªã¹ããªã©ïŒ
1察2ã®æŽæ°/æ¿å
¥ãè¡ãããŸã
- ããŒã¿ãæ¿å
¥ããããŒã¿ãæŽæ°ããããã«ã2ã€ã®èŸæžãæºåããŸã
- 颿°ã«å
¥ããåèŸæž
- å©çïŒ
å®éã®æŽæ°é¢æ°ã®äŸïŒ
@transaction.commit_manually def update_region_price(item_prices): """ """ from idea.catalog.models import CatalogItemInfo try: for ip in item_prices: CatalogItemInfo.objects.filter( item__id=ip["item_id"], region__id=ip["region_id"] ).update( kost=ip["kost"], price=ip["price"], excharge=ip["excharge"], zakup_price=ip["zakup_price"], real_zakup_price=ip["real_zakup_price"], vendor=ip["vendor"], srok=ip["srok"], bonus=ip["bonus"], rate=ip["rate"], liquidity_factor=ip["liquidity_factor"], fixed=ip["fixed"], ) except Exception, e: print e transaction.rollback() return False else: transaction.commit() return True
å®éã®å ç®é¢æ°ã®äŸïŒ
@transaction.commit_manually def insert_region_price(item_prices): """ """ from idea.catalog.models import CatalogItemInfo try: for ip in item_prices: CatalogItemInfo.objects.create(**ip) except Exception, e: print e transaction.rollback() return False else: transaction.commit() return True
ãããã®ç¹ãç¥ã£ãŠãããšãDjango ORMã䜿çšããŠãSQLã³ãŒãã«é©åããªã广çãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
質åãžã®åçïŒ
ãã®ãããªãã³ã¹ã¯ãªããªã£ãã®ã§ãORMã䜿çšãã䟡å€ãããå Žåãšããã§ãªãå Žåã«æžããŠãã ããã ïŒcïŒ
lvoORMã¯åçŽãªå Žåã¯åžžã«äœ¿çšãã¹ãã ãšæããŸãã ORMãè©ã«ãããªãã§ãã ãããããã«ã次ã®ãããªåºæ¬ã¯ãšãªãå®è¡ããªãã§ãã ããã
User.objects.values('username', 'email').annotate(cnt=Count('id')).filter(cnt__gt=1).order_by('-cnt')
ç¹ã«HLçç£ã ãè
¹ããããå¥ã®ã·ã¹ãã ãµãŒããŒãèªåã§å
¥æããŠãã ããã
åçŽãªãORMã¯ãšãªããèšè¿°ã§ããªãå Žåã¯ãåé¡ã解決ããããã®ã¢ã«ãŽãªãºã ã倿ŽããŠãã ããã
ããšãã°ãIMã®ã¯ã©ã€ã¢ã³ãã«ã¯ãæ£èŠè¡šçŸã䜿çšããç¹æ§ã«ãããã£ã«ã¿ãªã³ã°ããããŸãã ãµã€ã蚪åè
ãéåžžã«å€ããªããŸã§ãã¯ãŒã«ã§æè»ãªããšã æšæºã®Client-ORM-Base-ORM-Clientã®ä»£ããã«ã¢ãããŒãã倿ŽããClient-MongoDB-Python-Clientã«æžãçŽããŸããã MongoDBã®ããŒã¿ã¯ãã·ã¹ãã ãµãŒããŒäžã®ORMã«ãã£ãŠçæãããŸãã åã«è¿°ã¹ãããã«ãHLã¯ORMã ããæäœããŠãéæã§ããŸãã
ãªããžã£ã³ãŽãªã®ãããã ä»ã®ãã¬ãŒã ã¯ãŒã¯/ãã¯ãããžãŒãšæ¯èŒããŠããã®ãã¬ãŒã ã¯ãŒã¯ïŒããã³ãã®ORMïŒã®å©ç¹ã¯äœã§ããã ïŒcïŒ
ã¢ã³ãžã§ã³ãµã³æŽå²çã«ã Pythonã¯Djangoã§å匷ãå§ããŸããã ãããŠããã®äœ¿çšæè¡ã«é¢ããç¥èãæå€§éã«æŽ»çšããŸãã ãã©ãããã®äžŠè¡ç ç©¶äžã ãããŸã§ã®ãšãããPHPãšãã®ãã¬ãŒã ã¯ãŒã¯ã§ããcmsãšã®ã¿æ¯èŒã§ããŸãã ç§ã¯ããããäžè¬çãªãã¬ãŒãºãèšãã§ããã
-PHPã§æžãããšããç§ã¯æéãç¡é§ã«ç¡é§ã«ããŸãã ã
ããã§ãDjango 1.3.4ã®ããã€ãã®éå€§ãªæ¬ é¥ã«ååãä»ããããšãã§ããŸãã
- ããŒã¹ãšã®æ°žç¶çãªæ¥ç¶/åæïŒå€ãããŒãžã§ã³ã§ä¿®æ£æžã¿ïŒ
- ãã³ãã¬ãŒãããã»ããµã®é床ã ãããã¯ãŒã¯ã§èŠã€ãã£ããã¹ãã«ãããšãããã¯ååã«å°ããã§ãã 倿Žããå¿
èŠããããŸã:)
äžè¬ã«ããã³ãã¬ãŒãããã»ããµã®çæé床ãäžããæ¹æ³ã«ã¯ã1ã€ã®ã¯ãŒã«ãªããªãã¯ããããŸãã
ããŒã«ã«å€æ°ãä»ããŠãã³ãã¬ãŒãã«å€æ°ãæž¡ããªã
ïŒïŒ -ãã«ã¯é¢æ°ãšäžé倿°ã䜿çšãããšãéãã§ãã£ãããšåãæ»ã®ã¢ã³ã¹ã¿ãŒãåŸãããŸã:)
SQLã¯ãšãªãæžãã®ãé£ããããã°ã©ãã¯ã©ããªäººã§ããïŒ ïŒcïŒ
andreynikishaevBase-CodeããŒã¿åŠçéã®çžââäºäœçšã®ææ®µã§ã¯ãªããããã°ã©ã ã³ãŒãã«æéããããããã°ã©ããŒã SQLãç¥ã£ãŠããå¿
èŠããããŸã-å€ãã®å ŽåãããŒã¿ããŒã¹ã³ã³ãœãŒã«ãçŽæ¥æäœããŸãã ããããã³ãŒãã§ã¯-ORMã ORMã¯ã倿ŽãŸãã¯è£å®ãç°¡åãã€è¿
éã§ãã ãŸããåççã«ç°¡åãªãªã¯ãšã¹ããäœæããã°ãèªã¿ãããçè§£ãããããªããŸãã
ããããªãããã¿ããªïŒ ïŒäœãšã...ã³ã¡ã³ããææ¡ã質åãææ¡ãåŸ
ã£ãŠããŸãïŒ