AlembicをäŊŋį”¨ã—ãŸãƒ‡ãƒŧã‚ŋベãƒŧ゚į§ģčĄŒãŽäŊœæˆã¨ãƒ†ã‚šãƒˆã€‚YandexãƒŦポãƒŧト

ãƒãƒƒã‚¯ã‚¨ãƒŗãƒ‰ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã¯ã€PostgreSQL、SQLite、MariaDBãĒおぎさぞざぞãĒデãƒŧã‚ŋベãƒŧ゚で動äŊœã—ぞす。開į™ēč€…ã¯ã€ãƒ‡ãƒŧã‚ŋベãƒŧ゚ぎįŠļæ…‹ã‚’į°Ąå˜ã‹ã¤åŽ‰å…¨ãĢ変更する抟čƒŊã‚’åŽŸčŖ…ã™ã‚‹ã¨ã„ã†čĒ˛éĄŒãĢį›´éĸしãĻいぞす。デãƒŧã‚ŋベãƒŧ゚ぎ構造とデãƒŧã‚ŋč‡ĒäŊ“ãŽä¸Ąæ–šã‚’ã€ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŽã‚ã‚‹ãƒãƒŧã‚¸ãƒ§ãƒŗã‹ã‚‰åˆĨぎバãƒŧã‚¸ãƒ§ãƒŗãĢ変更するåŋ…čĻãŒã‚ã‚Šãžã™ã€‚





į§ãŽčŦ›æŧ”では、į§ģčĄŒã‚’įŽĄį†ã™ã‚‹ãŸã‚ãŽåŽŸį¸žãŽã‚ã‚‹ãƒ„ãƒŧãƒĢであるAlembicをäŊŋį”¨ã—ãŸįĩŒé¨“ã‚’å…ąæœ‰ã—ãžã—ãŸã€‚ Alembicã‚’é¸æŠžã™ã‚‹į†į”ąã€ãã‚Œã‚’äŊŋį”¨ã—ãĻį§ģčĄŒã‚’æē–å‚™ã™ã‚‹æ–šæŗ•ã€ãã‚Œã‚‰ã‚’īŧˆč‡Ē動ぞたは手動でīŧ‰åŽŸčĄŒã™ã‚‹æ–šæŗ•ã€ä¸å¯é€†įš„ãĒå¤‰æ›´ãŽå•éĄŒã‚’č§Ŗæąēã™ã‚‹æ–šæŗ•ã€į§ģčĄŒã‚’ãƒ†ã‚šãƒˆã™ã‚‹į†į”ąã€ãƒ†ã‚šãƒˆã§æ˜Žã‚‰ã‹ãĢã§ãã‚‹å•éĄŒã€ãŠã‚ˆãŗãã‚Œã‚‰ã‚’åŽŸčŖ…ã™ã‚‹æ–šæŗ•-į§ã¯ã“ã‚Œã‚‰ã™ãšãĻぎčŗĒ問ãĢį­”ãˆã‚ˆã†ã¨ã—ãžã—ãŸã€‚åŒæ™‚ãĢ、Alembicでぎį§ģ行äŊœæĨ­ã‚’į°Ąå˜ã§æĨŊしいもぎãĢã™ã‚‹ã„ãã¤ã‹ãŽãƒŠã‚¤ãƒ•ãƒãƒƒã‚¯ã‚’å…ąæœ‰ã—ãžã—ãŸã€‚



ãƒŦポãƒŧトぎæ—ĨäģĨ降、GitHubãŽã‚ŗãƒŧドがわずかãĢ更新され、さらãĢ多くぎ䞋がありぞす。゚ナイドãĢ襨į¤ēされãĻいるとおりãĢã‚ŗãƒŧドをįĸēčĒã—ãŸã„å ´åˆã¯ã€ããŽæ™‚į‚šã‹ã‚‰ãŽã‚ŗãƒŸãƒƒãƒˆã¸ãŽãƒĒãƒŗã‚¯ã‚’æŦĄãĢį¤ēしぞす。



- こんãĢãĄã¯īŧį§ãŽåå‰ã¯ã‚ĸãƒŦクã‚ĩãƒŗãƒ€ãƒŧã§ã™ã€‚ã‚¨ãƒ€ãƒ‡ã‚ŖãƒĢで働いãĻいぞす。ä슿—Ĩã¯ã€į§ãŸãĄãŒãŠãŽã‚ˆã†ãĢį§ģčĄŒã¨å…ąå­˜ã—ã€ãŠãŽã‚ˆã†ãĢį§ģčĄŒã¨å…ąå­˜ã§ãã‚‹ã‹ã‚’ãŠčŠąã—ã—ãŸã„ã¨æ€ã„ãžã™ã€‚ãŠãã‚‰ãã“ã‚Œã¯ã‚ãĒãŸãŒã‚ˆã‚Šį°Ąå˜ãĢ暎らすぎãĢåŊšįĢ‹ã¤ã§ã—ã‚‡ã†ã€‚



į§ģčĄŒã¨ã¯äŊ•ですかīŧŸ



始める前ãĢ、一čˆŦįš„ãĒį§ģ行ãĢついãĻčĒŦæ˜Žã™ã‚‹äžĄå€¤ãŒã‚ã‚Šãžã™ã€‚ãŸã¨ãˆã°ã€ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŒã‚ã‚Šã€ãã‚ŒãŒæŠŸčƒŊするようãĢいくつかぎã‚ŋブãƒŦットをäŊœæˆã—、それらãĢã‚ĸクã‚ģ゚しぞす。æŦĄãĢ、äŊ•かが変更された新しいバãƒŧã‚¸ãƒ§ãƒŗã‚’ãƒ­ãƒŧãƒĢã‚ĸã‚Ļトしぞす。最初ぎプãƒŦãƒŧトが変更され、2į•Ēį›ŽãŽãƒ—ãƒŦãƒŧトは変更されãĻおらず、3į•Ēį›ŽãŽãƒ—ãƒŦãƒŧトはäģĨå‰ã¯ã‚ã‚Šãžã›ã‚“ã§ã—ãŸãŒã€čĄ¨į¤ēされぞした。







æŦĄãĢ、ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŽæ–°ã—ã„ãƒãƒŧã‚¸ãƒ§ãƒŗãŒčĄ¨į¤ēされ、一部ぎプãƒŦãƒŧトが削除され、掋りぎプãƒŦãƒŧトãĢはäŊ•ã‚‚čĩˇã“りぞせん。それはäŊ•ですかīŧŸã“れがį§ģčĄŒã§čĄ¨įžã§ãã‚‹įŠļæ…‹ã¨č¨€ãˆãžã™ã€‚ã‚ã‚‹įŠļ態からåˆĨぎįŠļ態ãĢį§ģčĄŒã™ã‚‹ã¨ãã€ã“ã‚Œã¯ã‚ĸップグãƒŦãƒŧドであり、æˆģりたいときはダã‚Ļãƒŗã‚°ãƒŦãƒŧドです。



į§ģčĄŒã¨ã¯äŊ•ですかīŧŸ







一斚では、これはデãƒŧã‚ŋベãƒŧ゚ぎįŠļæ…‹ã‚’å¤‰æ›´ã™ã‚‹ã‚ŗãƒŧãƒ‰ã§ã™ã€‚ä¸€æ–šã€ã“ã‚Œã¯į§ãŸãĄãŒé–‹å§‹ã™ã‚‹ãƒ—ãƒ­ã‚ģ゚です。







į§ģ行ãĢはおぎようãĒãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŒåŋ…čĻã§ã™ã‹īŧŸã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŽãƒãƒŧã‚¸ãƒ§ãƒŗã§åˆ‡ã‚Šæ›ŋえるįŠļ態がã‚ĸトミックであることが重čĻã§ã™ã€‚ãŸã¨ãˆã°ã€2つぎテãƒŧブãƒĢがåŋ…čρãĒぎãĢ、1ã¤ã—ã‹čĄ¨į¤ēされãĒい場合、これはæœŦį•Ēį’°åĸƒã§ã‚ãžã‚Šč‰¯ã„įĩæžœã‚’もたらさãĒい可čƒŊ性がありぞす。



変更をロãƒŧãƒĢバックできることが重čĻã§ã™ã€‚æ–°ã—ã„ãƒãƒŧã‚¸ãƒ§ãƒŗã‚’ãƒ­ãƒŧãƒĢã‚ĸã‚Ļトした場合、それはé›ĸ陸せず、ロãƒŧãƒĢバックできず、通常、すずãĻãŒã˛ãŠãįĩ‚äē†ã—ぞす。



ぞた、バãƒŧã‚¸ãƒ§ãƒŗã‚’é †į•ĒãĢä¸ĻずãĻ、ロãƒŧãƒĢã™ã‚‹æ–šæŗ•ã‚’é€ŖéŽ–ã•ã›ã‚‹ã“ã¨ã‚‚é‡čĻã§ã™ã€‚



ツãƒŧãƒĢ



これらぎį§ģčĄŒã‚’ãŠãŽã‚ˆã†ãĢåŽŸčŖ…ã§ããžã™ã‹īŧŸ







é ­ãĢæĩŽã‹ãļ最初ぎã‚ĸイデã‚ĸīŧšã•ãĻ、į§ģčĄŒã¯SQLです。クエãƒĒをäŊŋį”¨ã—ãĻSQLãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã—ãĻãŋãžã›ã‚“ã‹ã€‚į§ãŸãĄãŽį”Ÿæ´ģをæĨŊãĢすることができるいくつかぎãƒĸジãƒĨãƒŧãƒĢがありぞす。







内部でäŊ•がčĩˇã“ãŖãĻいるかをčĻ‹ã‚‹ã¨ã€įĸēかãĢいくつかぎčĻæą‚ãŒã‚ã‚Šãžã™ã€‚ãã‚Œã¯CREATETABLE、ALTER、そぎäģ–äŊ•でもかぞいぞせん。 downgrade_v1.sqlãƒ•ã‚Ąã‚¤ãƒĢでは、すずãĻã‚­ãƒŖãƒŗã‚ģãƒĢしぞす。







ãĒぜあãĒたはこれをすずきではãĒいぎですかīŧŸä¸ģãĢあãĒたがあãĒたぎ手でそれをするåŋ…čĻãŒã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚ beginã‚’č¨˜čŋ°ã—ãĻã‹ã‚‰ã€å¤‰æ›´ã‚’ã‚ŗãƒŸãƒƒãƒˆã™ã‚‹ã“ã¨ã‚’åŋ˜ã‚ŒãĒã„ã§ãã ã•ã„ã€‚ã‚ŗãƒŧドを書くときは、すずãĻぎ䞝存é–ĸäŋ‚とäŊ•をおぎ順åēã§čĄŒã†ã‹ã‚’čĻšãˆãĻおくåŋ…čĻãŒã‚ã‚Šãžã™ã€‚ã“ã‚Œã¯ã‹ãĒりæ—Ĩå¸¸įš„ã§ã€å›°é›Ŗã§æ™‚é–“ãŽã‹ã‹ã‚‹äģ•äē‹ã§ã™ã€‚



čĒ¤ãŖãĻé–“é•ãŖãŸãƒ•ã‚Ąã‚¤ãƒĢをčĩˇå‹•することãĢ寞するäŋč­ˇã¯ã‚りぞせん。すずãĻãŽãƒ•ã‚Ąã‚¤ãƒĢã‚’æ‰‹å‹•ã§åŽŸčĄŒã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ 15回ぎį§ģčĄŒãŒã‚ã‚‹å ´åˆã€ãã‚Œã¯į°Ąå˜ã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚ã„ãã¤ã‹ãŽpsqlを15回å‘ŧãŗå‡ēすåŋ…čĻãŒã‚ã‚Šãžã™ãŒã€ãã‚ŒãģおクãƒŧãƒĢではありぞせん。



最も重čρãĒことは、デãƒŧã‚ŋベãƒŧ゚がおぎようãĒįŠļ態ãĢあるかがわからãĒいことです。ダã‚Ļãƒŗãƒ­ãƒŧãƒ‰ã—ãŸãƒ•ã‚Ąã‚¤ãƒĢとダã‚Ļãƒŗãƒ­ãƒŧドしãĒã‹ãŖãŸãƒ•ã‚Ąã‚¤ãƒĢをおこかãĢīŧˆį´™ãĢ、おこかãĢīŧ‰æ›¸ãį•™ã‚ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ã‚ãžã‚Šč‰¯ããĒいですね。yoyo-migrations







ãƒĸジãƒĨãƒŧãƒĢがありぞす。最も一čˆŦįš„ãĒデãƒŧã‚ŋベãƒŧ゚をã‚ĩポãƒŧãƒˆã—ã€į”Ÿâ€‹â€‹ãŽã‚¯ã‚¨ãƒĒをäŊŋį”¨ã—ãžã™ã€‚ åŊŧãŒį§ãŸãĄãĢ提䞛するもぎをčĻ‹ã‚‹ã¨ã€æŦĄãŽã‚ˆã†ãĢãĒりぞす。同じSQLãŒčĄ¨į¤ēされぞす。 yoyoナイブナãƒĒã‚’ã‚¤ãƒŗãƒãƒŧトするPythonã‚ŗãƒŧãƒ‰ãŒåŗå´ãĢすでãĢありぞす。















ã—ãŸãŒãŖãĻã€æ­ŖįĸēãĢč‡Ēå‹•įš„ãĢį§ģčĄŒã‚’é–‹å§‹ã§ããžã™ã€‚ã¤ãžã‚Šã€æ–°ã—ã„į§ģčĄŒã‚’äŊœæˆã—ãĻチェãƒŧãƒŗãĢčŋŊåŠ ã™ã‚‹ã‚ŗãƒžãƒŗãƒ‰ãŒã‚ã‚Šã€ãã“ã§SQLã‚ŗãƒŧãƒ‰ã‚’č¨˜čŋ°ã§ããžã™ã€‚ã‚ŗãƒžãƒŗãƒ‰ã‚’äŊŋį”¨ã—ãĻ、1つäģĨ上ぎį§ģčĄŒã‚’éŠį”¨ã—ãŸã‚Šã€ãƒ­ãƒŧãƒĢバックしたりできぞす。これはすでãĢä¸€æ­Šå‰é€˛ã—ãĻいぞす。







さらãĢ、デãƒŧã‚ŋベãƒŧã‚šã§åŽŸčĄŒã—ãŸãƒĒクエ゚ト、čĩˇå‹•ã—ãŸãƒ•ã‚Ąã‚¤ãƒĢ、äŊ•かがį™ēį”Ÿã—ãŸå ´åˆãĢロãƒŧãƒĢバックするåŋ…čĻãŒã‚ã‚‹å ´æ‰€ã‚’į´™ãĢ書くåŋ…čĻãŒãĒくãĒã‚Šãžã™ã€‚ã‚ã‚‹į¨ŽãŽįĩļ寞įĸē原ãĒäŋč­ˇãŒã‚りぞす。デãƒŧã‚ŋベãƒŧ゚ぎäģ–ぎ2つぎįŠļ態間ぎį§ģčĄŒãŽãŸã‚ãĢ、äģ–ãŽį›Žįš„ã§č¨­č¨ˆã•ã‚ŒãŸį§ģčĄŒã‚’é–‹å§‹ã§ããĒくãĒりぞす。非常ãĢ大きãĒプナ゚īŧšã“れは、個åˆĨãŽãƒˆãƒŠãƒŗã‚ļã‚¯ã‚ˇãƒ§ãƒŗã§å„į§ģčĄŒã‚’åŽŸčĄŒã—ãžã™ã€‚ã“ã‚Œã¯ãžãŸããŽã‚ˆã†ãĒäŋč¨ŧを与えぞす。







æŦ į‚šã¯æ˜Žã‚‰ã‹ã§ã™ã€‚あãĒãŸã¯ãžã į”ŸãŽSQLã‚’æŒãŖãĻいぞす。たとえば、Pythonでロジックがåēƒå¤§ãĒ大čĻæ¨ĄãĒデãƒŧã‚ŋã‚’į”Ÿæˆã—ãĻいる場合、SQLしかãĒいため、それをäŊŋį”¨ã™ã‚‹ã“ã¨ã¯ã§ããžã›ã‚“ã€‚



ぞた、č‡Ē動化できãĒいæ—Ĩ常æĨ­å‹™ãŒãŸãã•んありぞす。テãƒŧブãƒĢ間ぎすずãĻぎé–ĸäŋ‚īŧˆãŠã“かãĢ書きčžŧむことができるもぎと、ぞだ不可čƒŊãĒもぎīŧ‰ã‚’čŋŊčˇĄã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ä¸€čˆŦãĢ、非常ãĢ明らかãĒæŦ į‚šãŒã‚りぞす。



æŗ¨æ„ã‚’æ‰•ã†äžĄå€¤ãŒã‚ã‚Šã€ä슿—ĨãŽčŠąå…¨äŊ“が取り上げられãĻいるもう1つぎãƒĸジãƒĨãƒŧãƒĢは、Alembicです。







それはyoyoと同じもぎ、そしãĻã‚‚ãŖã¨ãŸãã•ã‚“ã‚ã‚Šãžã™ã€‚į§ģčĄŒã‚’į›ŖčĻ–ã—ãĻäŊœæˆã™ã‚‹æ–šæŗ•ã‚’įŸĨãŖãĻいるだけでãĒく、非常ãĢ複雑ãĒãƒ“ã‚¸ãƒã‚šãƒ­ã‚¸ãƒƒã‚¯ã‚’č¨˜čŋ°ã—たり、デãƒŧã‚ŋį”Ÿæˆå…¨äŊ“、Pythonぎäģģæ„ãŽæŠŸčƒŊをæŽĨįļšã—たりすることもできぞす。åŋ…čρãĢåŋœã˜ãĻ、デãƒŧã‚ŋをプãƒĢしãĻ内部でå‡Ļį†ã—ãžã™ã€‚ã—ãŸããĒい場合は、するåŋ…čĻã¯ã‚ã‚Šãžã›ã‚“ã€‚



ãģとんおぎ場合、åŊŧはč‡Ēå‹•įš„ãĢã‚ŗãƒŧãƒ‰ã‚’æ›¸ãã“ã¨ãŒã§ããžã™ã€‚ã‚‚ãĄã‚ã‚“ã€å¸¸ãĢではありぞせんが、手でたくさん書くåŋ…čĻãŒã‚ãŖãŸåžŒã¯ã€č‰¯ã„ãƒ—ãƒŠã‚šãŽã‚ˆã†ãĢčžã“ãˆãžã™ã€‚



åŊŧはたくさんぎクãƒŧãƒĢãĒã‚‚ãŽã‚’æŒãŖãĻいぞす。たとえば、SQLiteはALTERTABLEを厌全ãĢはã‚ĩポãƒŧトしãĻいぞせん。ぞた、AlembicãĢã¯ã€ã“ã‚Œã‚’æ•°čĄŒã§į°Ąå˜ãĢバイパ゚できる抟čƒŊãŒã‚ã‚Šã€č€ƒãˆã‚‹ã“ã¨ã™ã‚‰ã‚ã‚Šãžã›ã‚“ã€‚



前ぎ゚ナイドãĢは、Django-migrationsãƒĸジãƒĨãƒŧãƒĢがありぞした。これは、į§ģ行ãĢ非常ãĢ遊したãƒĸジãƒĨãƒŧãƒĢã§ã‚‚ã‚ã‚Šãžã™ã€‚ããŽåŽŸį†ã¯ã€æŠŸčƒŊįš„ãĢはAlembicãĢ匚æ•ĩしぞす。唯一ぎ違いは、フãƒŦãƒŧムワãƒŧクå›ē有であり、AlembicはそうではãĒいことです。



SQLAlchemy



AlembicはSQLAlchemyãĢåŸēãĨいãĻいるため、SQLAlchemyã‚’å°‘ã—åŽŸčĄŒã—ãĻ、それがäŊ•であるかをčĻšãˆãŸã‚ŠčĒŋずたりすることをお勧めしぞす。







ã“ã‚Œãžã§ã€į”ŸãŽã‚¯ã‚¨ãƒĒãĢついãĻčĻ‹ãĻããžã—ãŸã€‚į”ŸãŽã‚¯ã‚¨ãƒĒはæ‚Ēくありぞせん。これはとãĻã‚‚č‰¯ã„ã“ã¨ã§ã™ã€‚č˛ čˇãŽéĢ˜ã„ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŒã‚ã‚‹å ´åˆã€ã“ã‚ŒãŒãžã•ãĢåŋ…čρãĒもぎかもしれぞせん。一部ぎã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ã‚ã‚‹į¨ŽãŽã‚¯ã‚¨ãƒĒãĢå¤‰æ›ã™ã‚‹æ™‚é–“ã‚’į„Ąé§„ãĢするåŋ…čĻã¯ã‚ã‚Šãžã›ã‚“ã€‚



čŋŊ加ぎナイブナãƒĒはåŋ…čĻã‚ã‚Šãžã›ã‚“ã€‚ã‚ãĒたはただドナイバãƒŧを取るだけで、それだけです、それは抟čƒŊã—ãžã™ã€‚ã—ã‹ã—ã€ãŸã¨ãˆã°ã€č¤‡é›‘ãĒクエãƒĒをäŊœæˆã™ã‚‹å ´åˆã€ãã‚Œã¯ãã‚ŒãģãŠį°Ąå˜ã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚ãžã‚ã€åŽšæ•°ã‚’å–åž—ã—ãĻčĩˇå‹•し、大きãĒč¤‡æ•°čĄŒãŽã‚ŗãƒŧドをäŊœæˆã™ã‚‹ã“とができぞす。しかし、そぎようãĒčĻæą‚ãŒ10〜20ある場合、すでãĢčĒ­ã‚€ãŽã¯éžå¸¸ãĢå›°é›Ŗã§ã™ã€‚ãã†ã™ã‚‹ã¨ã€ãã‚Œã‚‰ã‚’å†åˆŠį”¨ã™ã‚‹ã“ã¨ã¯ã§ããžã›ã‚“ã€‚ã‚ãĒãŸã¯ãŸãã•ã‚“ãŽãƒ†ã‚­ã‚šãƒˆã¨ã€ã‚‚ãĄã‚ã‚“ã€æ–‡å­—åˆ—ã€f文字列ãĒおを操äŊœã™ã‚‹ãŸã‚ãŽé–ĸæ•°ã‚’æŒãŖãĻいぞすが、これはすでãĢã‚ãžã‚Šč‰¯ãčžã“ãˆãžã›ã‚“ã€‚ãã‚Œã‚‰ã¯čĒ­ãŋãĢくいです。



たとえば、クエãƒĒã‚„č¤‡é›‘ãĒ構造もåŋ…čρãĒã‚¯ãƒŠã‚šãŒã‚ã‚‹å ´åˆã€ã‚¤ãƒŗãƒ‡ãƒŗãƒˆã¯éžå¸¸ãĢč‹Ļį—›ã§ã™ã€‚į”ŸãŽį§ģčĄŒã‚’čĄŒã„ãŸã„å ´åˆã€äŊ•かをäŊŋį”¨ã—ãĻいる場所をčĻ‹ã¤ã‘ã‚‹å”¯ä¸€ãŽæ–šæŗ•ã¯ã€grepをäŊŋį”¨ã™ã‚‹ã“ã¨ã§ã™ã€‚ãžãŸã€å‹•įš„ã‚¯ã‚¨ãƒĒį”¨ãŽå‹•įš„ãƒ„ãƒŧãƒĢもありぞせん。



たとえば、非常ãĢį°Ąå˜ãĒã‚ŋã‚šã‚¯ã§ã™ã€‚ã‚¨ãƒŗãƒ†ã‚Ŗãƒ†ã‚ŖãŒã‚ã‚Šã€1つぎプãƒŦãƒŧトãĢ15ãŽãƒ•ã‚ŖãƒŧãƒĢドがありぞす。 PATCHãƒĒã‚¯ã‚¨ã‚šãƒˆã‚’čĄŒã„ãŸã„ã€‚ã¨ãĻã‚‚ã‚ˇãƒŗãƒ—ãƒĢãĢæ€ãˆãžã™ã€‚į”ŸãŽã‚¯ã‚¨ãƒĒでこれを書いãĻãŋãĻください。čĻ‹ãŸį›Žã¯ã‚ãžã‚Šč‰¯ããĒく、プãƒĢãƒĒクエ゚トがæ‰ŋčĒã•ã‚Œã‚‹å¯čƒŊ性はäŊŽã„です。







これãĢäģŖã‚ã‚‹ã‚‚ぎがありぞす-クエãƒĒビãƒĢダãƒŧ。クエãƒĒをPythonぎã‚ĒブジェクトとしãĻčĄ¨ã™ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€įĸēかãĢæŦ į‚šãŒã‚りぞす。



äžŋ厜上、ãƒĒã‚¯ã‚¨ã‚šãƒˆãŽį”Ÿæˆæ™‚é–“ã¨ãƒĄãƒĸãƒĒãŽä¸Ąæ–šã‚’æ”¯æ‰•ã†åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ã—ã‹ã—ã€ãƒ—ãƒŠã‚šãŒã‚ã‚Šãžã™ã€‚å¤§čĻæ¨Ąã§č¤‡é›‘ãĒã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã‚’äŊœæˆã™ã‚‹å ´åˆã¯ã€æŠŊčąĄåŒ–ãŒåŋ…čĻã§ã™ã€‚ã‚¯ã‚¨ãƒĒビãƒĢダãƒŧは、これらぎæŠŊčąĄåŒ–ã‚’æäž›ã§ããžã™ã€‚ã“ã‚Œã‚‰ãŽã‚¯ã‚¨ãƒĒã¯åˆ†č§Ŗã§ããžã™ã€‚ã“ã‚ŒãŒãŠãŽã‚ˆã†ãĢčĄŒã‚ã‚Œã‚‹ã‹ãĢついãĻは、少し垌でčĒŦ明しぞす。それらは、ビジネ゚ロジックãĢé–ĸ逪äģ˜ã‘られたフãƒŦãƒŗãƒ‰ãƒĒ名とすでãĢå‘ŧばれãĻいるé–ĸæ•°ã§å†åˆŠį”¨ã€æ‹Ąåŧĩ、ぞたはナップすることができぞす。



å‹•įš„ã‚¯ã‚¨ãƒĒぎäŊœæˆã¯éžå¸¸ãĢį°Ąå˜ã§ã™ã€‚äŊ•かを変更するåŋ…čĻãŒã‚ã‚‹å ´åˆã¯ã€į§ģčĄŒã‚’č¨˜čŋ°ã—ãĻãã ã•ã„ã€‚ã‚ŗãƒŧドぎįĩąč¨ˆåˆ†æžã§ååˆ†ã§ã™ã€‚とãĻもäžŋ刊です。



とãĢかくSQLAlchemyはãĒぜですかīŧŸãĒぜįĢ‹ãĄå¯„ã‚‹äžĄå€¤ãŒã‚ã‚‹ãŽã§ã™ã‹īŧŸ







これは、į§ģčĄŒã ã‘ã§ãĒく、一čˆŦįš„ãĒå•éĄŒã§ã™ã€‚ Alembicがある場合、SQLAlchemyは同期ドナイバãƒŧだけで抟čƒŊするわけではãĒいため、゚ã‚ŋック全äŊ“を一åēĻãĢäŊŋį”¨ã™ã‚‹ãŽãŒį†ãĢかãĒãŖãĻいぞす。つぞり、Djangoは非常ãĢå„ĒれたツãƒŧãƒĢですが、Alchemyは、たとえばasyncpgやaiopgでäŊŋį”¨ã§ããžã™ã€‚ SelivanovãŒč¨€ãŖãŸã‚ˆã†ãĢ、AsyncpgをäŊŋį”¨ã™ã‚‹ã¨ã€1į§’ã‚ãŸã‚Š100ä¸‡čĄŒã‚’čĒ­ãŋ取ることができぞす。デãƒŧã‚ŋベãƒŧ゚からčĒ­ãŋå–ãŖãĻ、PythonãĢčģĸé€ã—ãžã™ã€‚ã‚‚ãĄã‚ã‚“ã€SQLAlchemyをäŊŋį”¨ã™ã‚‹ã¨ã€å°‘ã—å°‘ãĒくãĒり、ã‚Ēãƒŧバãƒŧヘッドがį™ēį”Ÿã—ãžã™ã€‚ã¨ãĢかく。



SQLAlchemyãĢは、操äŊœæ–šæŗ•ã‚’įŸĨãŖãĻいるäŋĄã˜ã‚‰ã‚ŒãĒいãģおぎ数ぎドナイバãƒŧがありぞす。 OracleとPostgreSQLがあり、すずãĻぎåĨŊãŋã¨č‰˛ãĢ寞åŋœã—ãĻいぞす。さらãĢ、それらはすでãĢįŽąã‹ã‚‰å‡ēされãĻおり、åˆĨぎもぎがåŋ…čρãĒ場合は、最čŋ‘čĒŋずたところ、Elasticsearchもありぞす。įĸēかãĢ、čĒ­ã‚€ãŸã‚ã ã‘ã§ã™ãŒã€ã‚ã‹ã‚Šãžã™ã‹īŧŸ -SQLAlchemyぎElasticsearch。



非常ãĢå„ĒれたドキãƒĨãƒĄãƒŗãƒˆã€å¤§čĻæ¨ĄãĒã‚ŗãƒŸãƒĨãƒ‹ãƒ†ã‚ŖãŒã‚ã‚Šãžã™ã€‚ãŸãã•ã‚“ãŽãƒŠã‚¤ãƒ–ãƒŠãƒĒがありぞす。そしãĻ重čρãĒことãĢ、それはあãĒたãĢフãƒŦãƒŧムワãƒŧクとナイブナãƒĒを指į¤ēã—ãžã›ã‚“ã€‚ã†ãžãčĄŒã†åŋ…čĻãŽã‚ã‚‹į‹­ã„ã‚ŋã‚šã‚¯ã‚’åŽŸčĄŒã—ãĻいる場合、それはツãƒŧãƒĢãĢãĒる可čƒŊ性がありぞす。



それで、それはäŊ•で構成されãĻいぞすかīŧŸ







ä슿—Ĩ䏀᎒ãĢ働くä¸ģčρãĒ原äŊ“をここãĢæŒãŖãĻきぞした。これらはテãƒŧブãƒĢです。ãƒĒクエ゚トをäŊœæˆã™ã‚‹ãĢは、AlchemyãĢそれがäŊ•ã§ã‚ã‚‹ã‹ã¨į§ãŸãĄãŒäŊ•ã‚’æ‰ąãŖãĻいるかをäŧãˆã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚æŦĄã¯MetaDataãƒŦジ゚トãƒĒã§ã™ã€‚ã‚¨ãƒŗã‚¸ãƒŗã¯ã€ãƒ‡ãƒŧã‚ŋベãƒŧ゚ãĢæŽĨįļšã—、Dialectをäģ‹ã—ãĻデãƒŧã‚ŋベãƒŧ゚と通äŋĄã™ã‚‹ã‚‚ぎです。



それがäŊ•ã§ã‚ã‚‹ã‹ã‚’čŠŗã—ãčĻ‹ãĻãŋぞしょう。







MetaDataã¯ä¸€į¨ŽãŽã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã§ã‚ã‚Šã€ã‚ŗãƒŗãƒ†ãƒŠã§ã‚ã‚Šã€ãƒ†ãƒŧブãƒĢã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã€ãŠã‚ˆãŗä¸€čˆŦãĢ、所有しãĻいるすずãĻãŽã‚¨ãƒŗãƒ†ã‚Ŗãƒ†ã‚Ŗã‚’čŋŊåŠ ã—ãžã™ã€‚ã“ã‚Œã¯ã€ä¸€æ–šã§ã¯ã€č¨˜čŋ°ã—ãŸã‚ŗãƒŧドãĢåŸēãĨいãĻデãƒŧã‚ŋベãƒŧ゚をおぎようãĢ襨į¤ēするかを反映するã‚Ēブジェクトです。一斚、MetaDataはデãƒŧã‚ŋベãƒŧ゚ãĢã‚ĸクã‚ģ゚しãĻ、原際ãĢå­˜åœ¨ã™ã‚‹ã‚‚ãŽãŽã‚šãƒŠãƒƒãƒ—ã‚ˇãƒ§ãƒƒãƒˆã‚’å–åž—ã—ã€ã“ãŽã‚ĒブジェクトãƒĸデãƒĢč‡ĒäŊ“ã‚’æ§‹į¯‰ã§ããžã™ã€‚



ぞた、MetaDataã‚ĒブジェクトãĢは非常ãĢčˆˆå‘ŗæˇąã„æŠŸčƒŊが1つありぞす。これãĢã‚ˆã‚Šã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã¨åˆļį´„ãŽãƒ‡ãƒ•ã‚ŠãƒĢトぎå‘Ŋåãƒ†ãƒŗãƒ—ãƒŦãƒŧãƒˆã‚’åŽšįžŠã§ããžã™ã€‚ PostgreSQL、MySQL、MariaDBãĒお、すずãĻぎデãƒŧã‚ŋベãƒŧ゚ãĢã¯ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šãŽå‘ŧãŗå‡ēã—æ–šæŗ•ãĢé–ĸするį‹Ŧč‡ĒãŽãƒ“ã‚¸ãƒ§ãƒŗãŒã‚ã‚‹ãŸã‚ã€į§ģčĄŒã‚’äŊœæˆã™ã‚‹å ´åˆã€ã“れは非常ãĢ重čĻã§ã™ã€‚



一部ぎ開į™ēč€…ã¯ã€į‹Ŧč‡ĒãŽãƒ“ã‚¸ãƒ§ãƒŗã‚‚æŒãŖãĻいぞす。ぞた、SQLAlchemyをäŊŋį”¨ã™ã‚‹ã¨ã€æ¨™æē–を一åēĻã ã‘č¨­åŽšã—ãĻ、そぎ動äŊœã‚’すずãĻįĸēčĒã§ããžã™ã€‚ SQLiteとPostgreSQLãŽä¸Ąæ–šã§å‹•äŊœã™ã‚‹åŋ…čĻãŽã‚ã‚‹ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚’é–‹į™ēするåŋ…čĻãŒã‚ã‚Šãžã—ãŸã€‚ã¨ãĻもäžŋ刊でした。







æŦĄãŽã‚ˆã†ãĢãĒりぞす。SQLAlchemyからMetaDataã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ã‚¤ãƒŗãƒãƒŧトし、äŊœæˆã™ã‚‹ã¨ããĢ、naming_conventionãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧをäŊŋį”¨ã—ãĻãƒ†ãƒŗãƒ—ãƒŦãƒŧãƒˆã‚’æŒ‡åŽšã—ãžã™ã€‚ã“ãŽãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧぎキãƒŧã¯ã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã¨åˆļį´„ãŽã‚ŋイプを指厚しぞす。ix-é€šå¸¸ãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã€uq-ä¸€æ„ãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã€fk-外部キãƒŧ、pk-プナイマãƒĒキãƒŧ。



Naming_conventionãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧãŽå€¤ã§ã¯ã€ã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ŋイプ/åˆļį´„īŧˆix / uq / fkãĒおīŧ‰ã¨ãƒ†ãƒŧブãƒĢ名で構成されるパã‚ŋãƒŧãƒŗã‚’ä¸‹įˇšã§åŒēåˆ‡ãŖãĻæŒ‡åŽšã§ããžã™ã€‚ä¸€éƒ¨ãŽãƒ†ãƒŗãƒ—ãƒŦãƒŧトでは、すずãĻぎ列を一čĻ§čĄ¨į¤ēすることもできぞす。たとえば、プナイマãƒĒキãƒŧãĢ寞しãĻã“ã‚Œã‚’čĄŒã†åŋ…čĻã¯ãĒく、テãƒŧブãƒĢ名を指厚するだけで済ãŋぞす。



新しいプロジェクトぎäŊœæˆã‚’開始するときは、名前äģ˜ã‘ãƒ†ãƒŗãƒ—ãƒŦãƒŧトを一åēĻčŋŊ加するとåŋ˜ã‚ŒãĻしぞいぞす。それäģĨ降、すずãĻぎį§ģčĄŒã¯åŒã˜åå‰ãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã¨åˆļį´„ã§į”Ÿæˆã•ã‚ŒãĻいぞす。



これはåˆĨãŽį†į”ąã§é‡čĻã§ã™ã€‚ã‚ĒブジェクトãƒĸデãƒĢã§ã“ãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šãŒä¸čρãĢãĒãŖãŸã¨åˆ¤æ–­ã—ãĻ削除すると、AlembicはそれがäŊ•とå‘ŧばれるかをčĒč­˜ã—ã€į§ģčĄŒã‚’æ­Ŗã—ãį”Ÿæˆã—ãžã™ã€‚ã“ã‚Œã¯ã€ã™ãšãĻãŒæ­Ŗå¸¸ãĢ抟čƒŊするというäŋĄé ŧ性ぎ一厚ぎäŋč¨ŧです。



åŋ…ず遭遇するもう1つぎ非常ãĢ重čρãĒã‚¨ãƒŗãƒ†ã‚Ŗãƒ†ã‚Ŗã¯ã€ãƒ†ãƒŧブãƒĢです。これは、テãƒŧブãƒĢãĢåĢぞれる内厚をčĒŦ明するã‚Ēブジェクトです。







テãƒŧブãƒĢãĢは名前とデãƒŧã‚ŋã‚ŋイプぎ列があり、MetaDataはčĒŦ明するすずãĻぎãƒŦジ゚トãƒĒであるため、åŋ…į„ļįš„ãĢMetaDataãƒŦジ゚トãƒĒã‚’å‚į…§ã—ãžã™ã€‚ãžãŸã€ãƒ‡ãƒŧã‚ŋã‚ŋイプぎ列がありぞす。



į§ãŸãĄãŒčĒŦ明したことぎおかげで、SQLAlchemyはäģŠã§ã¯å¤šããŽã“とをįŸĨることができぞす。ここで外部キãƒŧを指厚した場合でも、åŊŧåĨŗã¯ãƒ†ãƒŧブãƒĢがäē’いãĢおぎようãĢæŽĨįļšã•れãĻいるかをįŸĨãŖãĻいぞす。そしãĻ、åŊŧåĨŗã¯äŊ•かをするåŋ…čĻãŒã‚ã‚‹é †åēã‚’įŸĨãŖãĻいるでしょう。







SQLAlchemyãĢはEngineもありぞす。重čρīŧšãƒĒクエ゚トãĢついãĻčŋ°ãšãŸã“とは個åˆĨãĢäŊŋį”¨ã§ãã€ã‚¨ãƒŗã‚¸ãƒŗã¯å€‹åˆĨãĢäŊŋį”¨ã§ããžã™ã€‚ãã—ãĻ、あãĒたはすずãĻã‚’ä¸€įˇ’ãĢäŊŋうことができぞす、čĒ°ã‚‚įĻã˜ãžã›ã‚“ã€‚ã¤ãžã‚Šã€Engineはã‚ĩãƒŧバãƒŧãĢį›´æŽĨæŽĨįļšã™ã‚‹æ–šæŗ•ã‚’įŸĨãŖãĻãŠã‚Šã€ãžãŖãŸãåŒã˜ã‚¤ãƒŗã‚ŋãƒŧãƒ•ã‚§ã‚¤ã‚šã‚’æäž›ã—ãžã™ã€‚ã„ã„ãˆã€ã‚‚ãĄã‚ã‚“ã€ã•ãžã–ãžãĒドナイバãƒŧがDBAPIãĢæē–拠しようとしぞす。推åĨ¨ã‚’čĄŒã†ã€PythonぎPEPがありぞす。しかし、EngineはすずãĻぎデãƒŧã‚ŋベãƒŧ゚ãĢ寞しãĻãžãŖãŸãåŒã˜ã‚¤ãƒŗã‚ŋãƒŧフェãƒŧ゚を提䞛し、非常ãĢäžŋ刊です。







最垌ぎä¸ģčρãĒマイãƒĢ゚トãƒŧãƒŗã¯Dialectã§ã™ã€‚ã“ã‚Œã¯ã€ã‚¨ãƒŗã‚¸ãƒŗãŒã•ãžã–ãžãĒデãƒŧã‚ŋベãƒŧ゚と通äŋĄã™ã‚‹æ–šæŗ•ã§ã™ã€‚ã“ã“ãĢは、さぞざぞãĒ言čĒžã€ã•ãžã–ãžãĒäēē々、さぞざぞãĒæ–šč¨€ãŒã‚ã‚Šãžã™ã€‚



これがäŊ•ぎためãĢあるぎかčĻ‹ãĻãŋぞしょう。







ã“ã‚Œã¯é€šå¸¸ãŽã‚¤ãƒŗã‚ĩãƒŧトがおぎようãĢčĻ‹ãˆã‚‹ã‹ã§ã™ã€‚ IDとé›ģå­ãƒĄãƒŧãƒĢãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŒã‚ãŖãŸã€å‰ãĢčĒŦ明したテãƒŧブãƒĢãĢæ–°ã—ã„čĄŒã‚’čŋŊ加する場合は、ここでé›ģå­ãƒĄãƒŧãƒĢを指厚し、æŒŋå…Ĩã‚’åŽŸčĄŒã—ãĻ、æŒŋå…ĨしたすずãĻぎもぎをすぐãĢčŋ”しぞす。



ãŸãã•ã‚“ãŽčĄŒã‚’čŋŊ加したい場合はおうãĒりぞすかīŧŸå•éĄŒãĒい。







ã“ã“ã§åŖčŋ°ãŽãƒĒ゚トをčģĸ送するだけです。いくつかぎčļ…ã‚ˇãƒŗãƒ—ãƒĢãĒãƒšãƒŗãŽåŽŒį’§ãĒã‚ŗãƒŧドぎようãĢčĻ‹ãˆãžã™ã€‚ãƒ‡ãƒŧã‚ŋがå…Ĩã‚Šã€ã‚ã‚‹į¨ŽãŽæ¤œč¨ŧとJSON゚キãƒŧマãĢ合æ ŧし、それだけでデãƒŧã‚ŋベãƒŧ゚ãĢå…Ĩりぞした。čļ…į°Ąå˜ã€‚



一部ぎクエãƒĒは非常ãĢč¤‡é›‘ã§ã™ã€‚ãƒĒã‚¯ã‚¨ã‚šãƒˆã‚’å°åˆˇã—ãĻ襨į¤ēã§ãã‚‹å ´åˆã‚‚ã‚ã‚Œã°ã€ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢするåŋ…čĻãŒã‚ã‚‹å ´åˆã‚‚ã‚ã‚Šãžã™ã€‚ã“ã‚Œã¯é›Ŗã—ã„ã“ã¨ã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚ AlchemyをäŊŋį”¨ã™ã‚‹ã¨ã€ã“ã‚Œã‚‰ã™ãšãĻã‚’åŽŸčĄŒã§ããžã™ã€‚ã“ãŽå ´åˆã€ãƒĒã‚¯ã‚¨ã‚šãƒˆã‚’ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢしぞした。原際ãĢデãƒŧã‚ŋベãƒŧ゚ãĢäŊ•が送äŋĄã•れるかをįĸēčĒã§ããžã™ã€‚







デãƒŧã‚ŋčĻæą‚ã¯éžå¸¸ãĢå˜į´”ãĢčĻ‹ãˆãžã™ã€‚æ–‡å­—é€šã‚Š2čĄŒã§ã€1čĄŒã§æ›¸ãã“ã¨ã‚‚ã§ããžã™ã€‚







たとえば、15ãƒ•ã‚ŖãƒŧãƒĢドぎPATCHãƒĒクエ゚トをäŊœæˆã™ã‚‹æ–šæŗ•ãĢついãĻぎčŗĒ問ãĢæˆģã‚Šãžã—ã‚‡ã†ã€‚ã“ã“ã§ã¯ã€ãƒ•ã‚ŖãƒŧãƒĢドぎ名前、そぎキãƒŧã€ãŠã‚ˆãŗå€¤ãŽãŋを書きčžŧむåŋ…čĻãŒã‚ã‚Šãžã™ã€‚åŋ…čρãĒãŽã¯ã“ã‚Œã ã‘ã§ã™ã€‚ãƒ•ã‚Ąã‚¤ãƒĢも文字列ぎäŊœæˆã‚‚ã€ãžãŖãŸãäŊ•もありぞせん。äžŋ刊そうですね。



ãŠãã‚‰ãã€į§ãŒäģ•äē‹ã§æ¯Žæ—ĨäŊŋį”¨ã—ãĻいる最も重čρãĒAlchemy抟čƒŊは、クエãƒĒãŽåˆ†č§Ŗã¨æ‹Ąåŧĩです。







PostgreSQLã§ã‚¤ãƒŗã‚ŋãƒŧフェイ゚をäŊœæˆã—ãĻいるとすると、ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã¯äŊ•ã‚‰ã‹ãŽæ–šæŗ•ã§äēēをæ‰ŋčĒã—ã€ããŽäēēがCRUDã‚’åŽŸčĄŒã§ãã‚‹ã‚ˆã†ãĢするåŋ…čĻãŒã‚ã‚Šãžã™ã€‚ã•ãĻã€åˆ†č§Ŗã™ã‚‹ã“ã¨ã¯ã‚ãžã‚Šã‚ã‚Šãžã›ã‚“ã€‚



デãƒŧã‚ŋぎバãƒŧã‚¸ãƒ§ãƒŗįŽĄį†ã€ã•ãžã–ãžãĒæŠŊčąĄåŒ–ã‚’äŊŋį”¨ã™ã‚‹éžå¸¸ãĢ複雑ãĒã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã‚’äŊœæˆã™ã‚‹å ´åˆã€į”Ÿæˆã™ã‚‹ã‚¯ã‚¨ãƒĒã¯č†¨å¤§ãĒ数ぎã‚ĩブクエãƒĒで構成される可čƒŊ性がありぞす。ã‚ĩブクエãƒĒはã‚ĩブクエãƒĒとįĩåˆã•れぞす。さぞざぞãĒã‚ŋ゚クがありぞす。ぞた、クエãƒĒãŽåˆ†č§ŖãŒéžå¸¸ãĢåŊšįĢ‹ã¤å ´åˆãŒã‚ã‚Šãžã™ã€‚ã“ã‚ŒãĢã‚ˆã‚Šã€ãƒ­ã‚¸ãƒƒã‚¯ã¨ã‚ŗãƒŧãƒ‰ãŽč¨­č¨ˆã‚’å¤§åš…ãĢ分é›ĸできぞす。



ãĒぜこぎようãĢ抟čƒŊするぎですかīŧŸãŸã¨ãˆã°ã€users_table.selectīŧˆīŧ‰ãƒĄã‚Ŋッドをå‘ŧãŗå‡ēすと、ã‚Ēブジェクトがčŋ”されぞす。whereīŧˆīŧ‰ãĒお、įĩæžœãŽã‚ĒブジェクトãĢ寞しãĻäģ–ãŽãƒĄã‚Ŋッドをå‘ŧãŗå‡ēすと、厌全ãĢ新しいã‚Ēブジェクトがčŋ”されぞす。すずãĻぎクエãƒĒã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¯ä¸å¤‰ã§ã™ã€‚ã—ãŸãŒãŖãĻ、åĨŊきãĒもぎぎ上ãĢæ§‹į¯‰ã™ã‚‹ã“ã¨ãŒã§ããžã™ã€‚



alembicからぎį§ģ行



これでSQLAlchemyをå‡Ļį†ã—ã€ã¤ã„ãĢAlembicマイグãƒŦãƒŧã‚ˇãƒ§ãƒŗã‚’äŊœæˆã§ãã‚‹ã‚ˆã†ãĢãĒりぞした。







AlembicぎäŊŋį”¨ã‚’é–‹å§‹ã™ã‚‹ã“ã¨ã¯ã€į‰šãĢ前ãĢčŋ°ãšãŸã‚ˆã†ãĢテãƒŧブãƒĢをすでãĢčĒŦ明し、MetaDataã‚Ēブジェクトを指厚しãĻã„ã‚‹å ´åˆã¯ã€ãžãŖãŸãé›Ŗã—ãã‚ã‚Šãžã›ã‚“ã€‚ alembicをpipinstallし、alembic initalembicとå‘ŧãŗãžã™ã€‚ alembic-ãƒĸジãƒĨãƒŧãƒĢãŽåå‰ã€‚ã“ã‚Œã¯ã‚ŗãƒžãƒŗãƒ‰ãƒŠã‚¤ãƒŗã§ã™ã€‚ã“ã‚ŒãŒã‚ã‚Šãžã™ã€‚ initã¯ã‚ŗãƒžãƒŗãƒ‰ã§ã™ã€‚æœ€åžŒãŽåŧ•数は、それを配įŊŽã™ã‚‹ãƒ•りãƒĢダãƒŧです。



ã“ãŽã‚ŗãƒžãƒŗãƒ‰ã‚’å‘ŧãŗå‡ēã™ã¨ã€ã„ãã¤ã‹ãŽãƒ•ã‚Ąã‚¤ãƒĢがäŊœæˆã•れぞす。これãĢついãĻčŠŗã—ãčĻ‹ãĻいきぞす。







alembic.iniãĢは一čˆŦįš„ãĒ構成がありぞす。 script_locationは、ぞさãĢあãĒãŸãŒčĄŒããŸã„å ´æ‰€ã§ã™ã€‚æŦĄãĢã€į”Ÿæˆã™ã‚‹į§ģčĄŒãŽåå‰ãŽãƒ†ãƒŗãƒ—ãƒŦãƒŧトと、デãƒŧã‚ŋベãƒŧ゚ãĢæŽĨįļšã™ã‚‹ãŸã‚ãŽæƒ…å ąãŒã‚ã‚Šãžã™ã€‚







新しいį§ģčĄŒį”¨ãŽãƒ†ãƒŗãƒ—ãƒŦãƒŧトもありぞす。 「新しいį§ģčĄŒãŒåŋ…čĻã§ã™ã€ã¨č¨€ã†ã¨ã€Alembicã¯į‰šåŽšãŽãƒ†ãƒŗãƒ—ãƒŦãƒŧトãĢåž“ãŖãĻそれをäŊœæˆã—ぞす。これらすずãĻをã‚Ģ゚ã‚ŋマイã‚ēできぞす。非常ãĢį°Ąå˜ã§ã™ã€‚ã“ãŽãƒ•ã‚Ąã‚¤ãƒĢãĢã‚ĸクã‚ģ゚しãĻ、åŋ…čρãĒã‚‚ãŽã‚’įˇ¨é›†ã—ãžã™ã€‚ã“ã“ã§æŒ‡åŽšã§ãã‚‹ã™ãšãĻぎ変数は、ドキãƒĨãƒĄãƒŗãƒˆãĢありぞす。これは最初ぎ部分です。上部ãĢã‚ã‚‹į¨ŽãŽč§ŖčĒŦがあるぎで、そこでäŊ•がčĩˇã“ãŖãĻいるぎかをčĻ‹ã‚‹ãŽãĢäžŋ刊です。æŦĄãĢ、すずãĻぎį§ģ行ãĢåĢぞれるずき変数ぎã‚ģットがありぞす-ãƒĒãƒ“ã‚¸ãƒ§ãƒŗã€down_revision。ä슿—ĨはåŊŧã‚‰ã¨ä¸€įˇ’ãĢ働きぞす。さらãĢ-čŋŊåŠ ãŽãƒĄã‚ŋæƒ…å ąã€‚







最も重čρãĒæ–šæŗ•ã¯ã€ã‚ĸップグãƒŦãƒŧドとダã‚Ļãƒŗã‚°ãƒŦãƒŧドです。 Alembicは、ここでMetaDataã‚Ēブジェクトが゚キãƒŧマぎčĒŦ明とデãƒŧã‚ŋベãƒŧ゚ãĢあるもぎとぎ間ãĢčĻ‹ã¤ã‘ãŸé•ã„ã‚’įŊŽãæ›ãˆãžã™ã€‚







env.pyは、Alembicã§æœ€ã‚‚čˆˆå‘ŗæˇąã„ãƒ•ã‚Ąã‚¤ãƒĢã§ã™ã€‚ã‚ŗãƒžãƒŗãƒ‰åŽŸčĄŒãŽé€˛čĄŒįŠļæŗã‚’åˆļåžĄã—ã€č‡Ē分でã‚Ģ゚ã‚ŋマイã‚ēできるようãĢしぞす。 MetaDataã‚ĒブジェクトをæŽĨįļšã™ã‚‹ãŽã¯ã“ãŽãƒ•ã‚Ąã‚¤ãƒĢです。前ãĢčŋ°ãšãŸã‚ˆã†ãĢ、MetaDataã‚Ēブジェクトは、デãƒŧã‚ŋベãƒŧ゚内ぎすずãĻãŽã‚¨ãƒŗãƒ†ã‚Ŗãƒ†ã‚ŖãŽãƒŦジ゚トãƒĒです。



ここでこぎMetaDataã‚ĒブジェクトをæŽĨįļšã—ãĻいぞす。そしãĻそぎ時から、Alembicは、ここãĢį§ãŽãƒĸデãƒĢ、ここãĢį§ãŽãƒ—ãƒŦãƒŧãƒˆãŒã‚ã‚‹ã“ã¨ã‚’į†č§Ŗã—ãĻいぞす。åŊŧはč‡Ē分がäŊ•ã‚’æ‰ąãŖãĻã„ã‚‹ã‹ã‚’į†č§Ŗã—ãĻいぞす。æŦĄãĢ、AlembicãĢは、ã‚Ēãƒ•ãƒŠã‚¤ãƒŗãžãŸã¯ã‚ĒãƒŗãƒŠã‚¤ãƒŗã§Alembicをå‘ŧãŗå‡ēã™ã‚ŗãƒŧドがありぞす。これãĢついãĻã‚‚æ¤œč¨Žã—ãžã™ã€‚



これはぞさãĢ、プロジェクトでMetaDataをæŽĨįļšã™ã‚‹åŋ…čĻãŒã‚ã‚‹čĄŒã§ã™ã€‚äŊ•ã‹ãŒã¯ãŖãã‚Šã—ãĻいãĒくãĻもåŋƒé…ã—ãĒã„ã§ãã ã•ã„ã€‚į§ã¯ã™ãšãĻをプロジェクトãĢ集めãĻGitHubãĢ投į¨ŋしぞした。あãĒãŸã¯ãã‚Œã‚’č¤‡čŖŊしãĻčĻ‹ã‚‹ã“ã¨ãŒã§ãã€ãã‚Œã‚’ã™ãšãĻ感じることができぞす。







ã‚ĒãƒŗãƒŠã‚¤ãƒŗãƒĸãƒŧドとはäŊ•ですかīŧŸã‚ĒãƒŗãƒŠã‚¤ãƒŗãƒĸãƒŧドでは、Alembicはalembic.iniãƒ•ã‚Ąã‚¤ãƒĢぎsqlalchemy.urlãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧで指厚されたデãƒŧã‚ŋベãƒŧ゚ãĢæŽĨįļšã—、į§ģčĄŒãŽåŽŸčĄŒã‚’é–‹å§‹ã—ãžã™ã€‚



ãĒãœã“ãŽã‚ŗãƒŧドをčĻ‹ãĻいるぎですかīŧŸ Alembicは非常ãĢ柔čģŸãĢã‚Ģ゚ã‚ŋマイã‚ēできぞす。



さぞざぞãĒデãƒŧã‚ŋベãƒŧ゚゚キãƒŧマãĢ存在するåŋ…čĻãŒã‚ã‚‹ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŒã‚ã‚‹ã¨ã—ãžã™ã€‚ãŸã¨ãˆã°ã€ä¸€åēĻãĢ多数ぎã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã‚¤ãƒŗã‚šã‚ŋãƒŗã‚šã‚’åŽŸčĄŒã—ã€ãã‚Œãžã‚ŒãŒį‹Ŧč‡Ēぎ゚キãƒŧムで動äŊœã™ã‚‹ã‚ˆã†ãĢしたいとしぞす。それはäžŋ刊でåŋ…čρãĒ場合がありぞす。



č˛ģį”¨ã¯ä¸€åˆ‡ã‹ã‹ã‚Šãžã›ã‚“ã€‚ context.begin_transactionīŧˆīŧ‰ãƒĄã‚Ŋッドをå‘ŧãŗå‡ēã—ãŸåžŒã€ã‚ŗãƒžãƒŗãƒ‰ã€ŒSET search_path = SCHEMAã€ã‚’č¨˜čŋ°ã§ããžã™ã€‚これãĢより、PostgreSQLãĢåˆĨぎデフりãƒĢト゚キãƒŧマをäŊŋį”¨ã™ã‚‹ã‚ˆã†ãĢ指į¤ēされぞす。そしãĻそれがすずãĻです。äģŠåžŒã€ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã¯åŽŒå…¨ãĢį•°ãĒる゚キãƒŧムで動äŊœã—、į§ģčĄŒã¯åˆĨぎ゚キãƒŧムãĢį§ģčĄŒã—ãžã™ã€‚ã“ã‚Œã¯1čĄŒãŽčŗĒ問です。







ã‚Ēãƒ•ãƒŠã‚¤ãƒŗãƒĸãƒŧドもありぞす。ここでは、Alembicã¯ã‚¨ãƒŗã‚¸ãƒŗã‚’äŊŋį”¨ã—ãĒいことãĢæŗ¨æ„ã—ãĻください。ここでåŊŧãĢãƒĒãƒŗã‚¯ã‚’æ¸Ąã™ã ã‘ã§ã™ã€‚ã‚‚ãĄã‚ã‚“ã€ã‚¨ãƒŗã‚¸ãƒŗã‚’čģĸ送することもできぞすが、おこãĢもæŽĨįļšã•ã‚Œãžã›ã‚“ã€‚į”ŸãŽã‚¯ã‚¨ãƒĒã‚’į”Ÿæˆã™ã‚‹ã ã‘ã§ã€ãŠã“ã‹ã§åŽŸčĄŒã§ããžã™ã€‚







つぞり、AlembicといくつかぎMetaDataとテãƒŧブãƒĢがありぞす。そしãĻ、最įĩ‚įš„ãĢč‡Ē分でį§ģčĄŒã‚’į”Ÿæˆã—ãŸã„ã¨ã—ãžã™ã€‚ã“ãŽã‚ŗãƒžãƒŗãƒ‰ã‚’åŽŸčĄŒã™ã‚‹ã¨ã€åŸēæœŦįš„ãĢはそれだけです。 Alembicはデãƒŧã‚ŋベãƒŧ゚ãĢã‚ĸクã‚ģ゚し、そこãĢäŊ•があるかをįĸēčĒã—ãžã™ã€‚åŊŧãŽį‰šåˆĨãĒナベãƒĢ「alembic_versions」はありぞすかīŧŸã“れは、į§ģčĄŒãŒã“ãŽãƒ‡ãƒŧã‚ŋベãƒŧ゚ですでãĢåą•é–‹ã•ã‚ŒãĻいることをį¤ēしãĻいぞすかīŧŸãã“ãĢおぎテãƒŧブãƒĢが存在するかがわかりぞす。デãƒŧã‚ŋベãƒŧ゚ãĢåŋ…čρãĒデãƒŧã‚ŋãŒčĄ¨į¤ēされぞす。これらすずãĻã‚’åˆ†æžã—ã€ã“ãŽãƒ†ãƒŗãƒ—ãƒŦãƒŧトãĢåŸēãĨいãĻæ–°ã—ã„ãƒ•ã‚Ąã‚¤ãƒĢã‚’į”Ÿæˆã™ã‚‹ã¨ã€į§ģčĄŒãŒčĄŒã‚ã‚Œãžã™ã€‚ã‚‚ãĄã‚ã‚“ã€Alembicはåŋ…ずしもåŋ…čρãĒã‚‚ãŽã‚’į”Ÿæˆã™ã‚‹ã¨ã¯é™ã‚‰ãĒいため、į§ģčĄŒã§į”Ÿæˆã•ã‚ŒãŸã‚‚ãŽã‚’åŋ…ずįĸēčĒã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ã—ã‹ã—ã€ãģとんおぎ場合、それは抟čƒŊしぞす。







äŊ•ã‚’į”Ÿæˆã—ãžã—ãŸã‹īŧŸãƒĻãƒŧã‚ļãƒŧぎã‚ĩã‚¤ãƒŗãŒã‚ã‚Šãžã—ãŸã€‚į§ģčĄŒã‚’į”Ÿæˆã—ãŸã¨ããĢã€æœ€åˆãŽãƒĄãƒƒã‚ģãƒŧジをį¤ēしぞした。į§ģ行ãĢは、äģĨ前ãĢalembic.iniで指厚されたäģ–ãŽãƒ†ãƒŗãƒ—ãƒŦãƒŧトをäŊŋį”¨ã—ãĻinitial.pyという名前がäģ˜ã‘られぞす。



こぎį§ģčĄŒãŽIDãĢé–ĸã™ã‚‹æƒ…å ąã‚‚ã‚ã‚Šãžã™ã€‚ down_revision = None-これは最初ぎį§ģčĄŒã§ã™ã€‚



æŦĄãŽã‚šãƒŠã‚¤ãƒ‰ã¯æœ€ã‚‚重čρãĒ部分ですīŧšã‚ĸップグãƒŦãƒŧドとダã‚Ļãƒŗã‚°ãƒŦãƒŧド。







ã‚ĸップグãƒŦãƒŧドでは、プãƒŦãƒŧトがäŊœæˆã•れãĻいることがわかりぞす。ダã‚Ļãƒŗã‚°ãƒŦãƒŧãƒ‰ã§ã¯ã€ã“ãŽč¨˜åˇã¯å‰Šé™¤ã•ã‚Œãžã™ã€‚ Alembicは、デフりãƒĢトで、そぎようãĒã‚ŗãƒĄãƒŗãƒˆã‚’å…ˇäŊ“įš„ãĢčŋŊ加しãĻ、そこãĢį§ģ動しãĻįˇ¨é›†ã—ã€å°‘ãĒãã¨ã‚‚ã“ã‚Œã‚‰ãŽã‚ŗãƒĄãƒŗãƒˆã‚’å‰Šé™¤ã—ãžã™ã€‚åŋĩぎため、į§ģčĄŒã‚’įĸēčĒã—ã€ã™ãšãĻがおåŽĸ様ãĢ遊しãĻいることをįĸēčĒã—ãžã—ãŸã€‚ã“ã‚Œã¯1つぎチãƒŧãƒ ãŽå•éĄŒã§ã™ã€‚ã™ã§ãĢį§ģčĄŒãŒã‚ã‚Šãžã™ã€‚







そぎ垌、こぎį§ģčĄŒã‚’éŠį”¨ã™ã‚‹å¯čƒŊæ€§ãŒã‚ã‚Šãžã™ã€‚į°Ąå˜ãĒことではありぞせん。あãĒãŸã¯ãŸã č¨€ã†åŋ…čĻãŒã‚ã‚Šãžã™īŧšã‚ĸãƒŦムビックã‚ĸップグãƒŦãƒŧドヘッド。åŊŧはįĩļ寞ãĢすずãĻã‚’éŠį”¨ã—ãžã™ã€‚



é ­ã¨č¨€ã†ã¨ã€æœ€æ–°ãŽį§ģ行ãĢæ›´æ–°ã—ã‚ˆã†ã¨ã—ãžã™ã€‚į‰šåŽšãŽį§ģ行ãĢ名前をäģ˜ã‘ると、それãĢ更新されぞす。



ãŸã¨ãˆã°ã€æ°—ãŒå¤‰ã‚ãŖãŸå ´åˆãĢ備えãĻ、ダã‚Ļãƒŗã‚°ãƒŦãƒŧãƒ‰ã‚ŗãƒžãƒŗãƒ‰ã‚‚ã‚ã‚Šãžã™ã€‚ã“ã‚Œã¯ã™ãšãĻãƒˆãƒŠãƒŗã‚ļã‚¯ã‚ˇãƒ§ãƒŗã§čĄŒã‚ã‚Œã€éžå¸¸ãĢį°Ąå˜ãĢ抟čƒŊしぞす。







つぞり、į§ģčĄŒãŒã‚ã‚Šã€ãã‚Œã‚‰ã‚’åŽŸčĄŒã™ã‚‹æ–šæŗ•ã‚’įŸĨãŖãĻいぞす。ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŒã‚ã‚Šã€ãŸã¨ãˆã°ã€æŦĄãŽčŗĒ問をしãĻいる場合īŧšCIãŒã‚ã‚Šã€ãƒ†ã‚šãƒˆãŒåŽŸčĄŒã•ã‚ŒãĻいぞす。たとえば、į§ģčĄŒã‚’č‡Ēå‹•įš„ãĢåŽŸčĄŒã™ã‚‹ã‹ãŠã†ã‹ã•ãˆã‚ã‹ã‚Šãžã›ã‚“ã€‚ãŸãļんあãĒãŸãŽæ‰‹ã§ãã‚Œã‚’ã™ã‚‹æ–šãŒč‰¯ã„ã§ã™ã‹īŧŸ



ここãĢはさぞざぞãĒčĻ–į‚šãŒã‚ã‚Šãžã™ã€‚ãŠãã‚‰ãã€ãƒĢãƒŧãƒĢã‚’åŽˆã‚‹äžĄå€¤ãŒã‚ã‚Šãžã™ã€‚į°Ąå˜ãĢã‚ĸクã‚ģ゚できず、デãƒŧã‚ŋベãƒŧ゚を備えたčģŠãĢ䚗ることができãĒã„å ´åˆã¯ã€ã‚‚ãĄã‚ã‚“ã€č‡Ēå‹•įš„ãĢčĄŒã†æ–šãŒã‚ˆã„ã§ã—ã‚‡ã†ã€‚



ã‚ĸクã‚ģ゚できる場合は、クナã‚Ļドで抟čƒŊするã‚ĩãƒŧビ゚をäŊœæˆã—ã€ã„ã¤ã‚‚æŒãŖãĻいるナップトップからそこãĢã‚ĸクã‚ģ゚できぞす。そうすれば、č‡Ēåˆ†ã§ãã‚Œã‚’åŽŸčĄŒã§ãã‚‹ãŸã‚ã€ã‚ˆã‚ŠčŠŗį´°ãĢåˆļåžĄã§ããžã™ã€‚



一čˆŦãĢ、これをč‡Ēå‹•įš„ãĢčĄŒã†ãŸã‚ãŽãƒ„ãƒŧãƒĢはたくさんありぞす。たとえば、同じKubernetesã§ã€‚ã“ã‚Œã‚’åŽŸčĄŒã§ãã€ã“ã‚Œã‚‰ãŽã‚ŗãƒžãƒŗãƒ‰ã‚’åŽŸčĄŒã§ãã‚‹initã‚ŗãƒŗãƒ†ãƒŠãƒŧãŒã‚ã‚Šãžã™ã€‚ã“ã‚Œã‚’čĄŒã†ãĢは、čĩˇå‹•ã‚ŗãƒžãƒŗãƒ‰ã‚’DockerãĢį›´æŽĨčŋŊ加できぞす。



č€ƒæ…Žã™ã‚‹åŋ…čĻãŒã‚ã‚‹ãŽã¯ã€į§ģčĄŒã‚’č‡Ēå‹•įš„ãĢéŠį”¨ã™ã‚‹å ´åˆã€ãŸã¨ãˆã°ã€ãƒ­ãƒŧãƒĢバックしたいができãĒい場合ãĢおうãĒã‚‹ã‹ã‚’č€ƒãˆã‚‹åŋ…čĻãŒã‚ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚ãŸã¨ãˆã°ã€500ゎã‚Ŧバイトぎデãƒŧã‚ŋプãƒŦãƒŧトがありぞした。あãĒãŸã¯č€ƒãˆãžã—ãŸīŧšã•ãĻ、こぎデãƒŧã‚ŋはもはやビジネ゚ロジックãĢはåŋ…čĻã‚ã‚Šãžã›ã‚“ã€ãŠãã‚‰ããã‚Œã‚’čŊとすことができぞす。åŊŧらはそれを取り、それをčŊとしぞした。ぞたは、デãƒŧã‚ŋãŽæå¤ąãĢäŧ´ãŖãĻ変更された列ぎã‚ŋã‚¤ãƒ—ã‚’å¤‰æ›´ã—ãžã—ãŸã€‚ãŸã¨ãˆã°ã€é•ˇã„åˆ—ãŒã‚ã‚Šãžã—ãŸãŒã€įŸ­ããĒりぞした。ぞたはäŊ•かがãĒくãĒãŖãĻいぞす。ぞたは、列を削除しぞした。åŋ…čρãĒ場合でもロãƒŧãƒĢバックすることはできぞせん。



かつãĻį§ã¯ã‚Ēãƒŗãƒ—ãƒŦミ゚向けぎčŖŊ品をäŊœæˆã—ãžã—ãŸã€‚ã“ã‚Œã¯ã€ãƒžã‚ˇãƒŗä¸Šã§į›´æŽĨäēē々ぎためãĢexeãƒ•ã‚Ąã‚¤ãƒĢãĢã‚ˆãŖãĻã‚¤ãƒŗã‚šãƒˆãƒŧãƒĢã•ã‚Œãžã™ã€‚į†č§Ŗã—ãŸã‚‰īŧšã¯ã„、あãĒたはį§ģčĄŒã‚’æ›¸ããžã—ãŸã€ãã‚Œã¯æœŦį•Ēį’°åĸƒãĢå…Ĩりぞした、äēē々はすでãĢãã‚Œã‚’ã‚¤ãƒŗã‚šãƒˆãƒŧãƒĢしぞした。äģŠåžŒ5嚴間で、SLAãĢåž“ãŖãĻ抟čƒŊする可čƒŊ性があり、äŊ•かを変更したい場合は、äŊ•かが攚善される可čƒŊæ€§ãŒã‚ã‚Šãžã™ã€‚ã“ãŽæ™‚į‚šã§ã€ä¸å¯é€†įš„ãĒ変更ãĢ寞å‡Ļã™ã‚‹æ–šæŗ•ãĢついãĻč€ƒãˆãžã™ã€‚







ここãĢã‚‚ãƒ­ã‚ąãƒƒãƒˆį§‘å­Ļはありぞせん。ã‚ĸイデã‚ĸは、これらぎ列ぎäŊŋį”¨ã‚„ãƒ†ãƒŧブãƒĢぎäŊŋį”¨ã‚’ã§ãã‚‹ã ã‘éŋけることができるということです。それらãĢ逪įĩĄã™ã‚‹ãŽã‚’やめãĒさい。たとえば、ORMã§į‰šåˆĨãĒãƒ‡ã‚ŗãƒŦãƒŧã‚ŋをäŊŋį”¨ã—ãĻãƒ•ã‚ŖãƒŧãƒĢドãĢマãƒŧクをäģ˜ã‘ることができぞす。åŊŧはログであãĒãŸãŒã“ãŽãƒ•ã‚ŖãƒŧãƒĢドãĢč§ĻれたくãĒã„ã‚ˆã†ã ãŖãŸã¨č¨€ã†ã§ã—ã‚‡ã†ã€ã—ã‹ã—ã‚ãĒたはぞだåŊŧãĢč¨€åŠã—ãĻいぞす。バックログãĢã‚ŋ゚クをäŊœæˆã—、いつか削除するだけです。



ãŠãĄã‚‰ã‹ã¨ã„ãˆã°ã€ãƒ­ãƒŧãƒĢバックする時間がありぞす。そしãĻ、すずãĻがうぞくいけば、バックログぎ垌半でこぎã‚ŋ゚クをčŊãĄį€ã„ãĻåŽŸčĄŒã—ãžã™ã€‚åŽŸéš›ãĢすずãĻを削除するåˆĨぎį§ģčĄŒã‚’čĄŒã„ãžã™ã€‚



ここで最も重čρãĒčŗĒ問です。į§ģčĄŒã‚’ãƒ†ã‚šãƒˆã™ã‚‹į†į”ąã¨æ–šæŗ•ã¯īŧŸ







į§ãŒå°‹ã­ãŸäēēぎãģã¨ã‚“ãŠã¯ã“ã‚Œã‚’ã—ãžã›ã‚“ã€‚ã—ã‹ã—ã€ãã‚Œã‚’čĄŒã†æ–šãŒč‰¯ã„ã§ã™ã€‚ã“ã‚Œã¯ã€į—›ãŋã€čĄ€ã€æą—ã§æ›¸ã‹ã‚ŒãŸãƒĢãƒŧãƒĢです。æœŦį•Ēį’°åĸƒã§į§ģčĄŒã‚’äŊŋį”¨ã™ã‚‹ã“ã¨ã¯å¸¸ãĢåąé™ēです。あãĒたはそれがおぎようãĢįĩ‚わるかをæąēしãĻįŸĨりぞせん。 CIを構成しãĻいる場合、厌全ãĢæ­Ŗå¸¸ãĢ動äŊœã™ã‚‹æœŦį•Ēį’°åĸƒã§ãŽéžå¸¸ãĢå„Ēれたį§ģčĄŒã§ã•ãˆã€ã‚¸ãƒŖãƒŧクする可čƒŊ性がありぞす。



原際ぎところ、į§ģčĄŒã‚’ãƒ†ã‚šãƒˆã™ã‚‹ã¨ããĢ、たとえば、゚テãƒŧジぞたはæœŦį•Ēį’°åĸƒãŽä¸€éƒ¨ã‚’ダã‚Ļãƒŗãƒ­ãƒŧãƒ‰ã™ã‚‹ã“ã¨ã‚‚ã§ããžã™ã€‚ãƒ—ãƒ­ãƒ€ã‚¯ã‚ˇãƒ§ãƒŗã¯å¤§čĻæ¨ĄãĢãĒる可čƒŊ性があり、テ゚トやそぎäģ–ぎã‚ŋ゚クぎためãĢ厌全ãĢダã‚Ļãƒŗãƒ­ãƒŧドすることはできぞせん。開į™ēæ‹ į‚šã¯ã€åŽŸå‰‡ã¨ã—ãĻ、原際ãĢã¯į”Ÿį”Ŗæ‹ į‚šã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚åŊŧらはäŊ•åš´ãĢã‚‚ã‚ãŸãŖãĻč“„įŠã§ããŸã‚‚ãŽãŽå¤šãã‚’æŒãŖãĻいぞせん。







これは、äŊ•かをį§ģčĄŒã—ãŸã¨ããĢデãƒŧã‚ŋãŒį ´æã—ãŸã‚Šã€ãƒ‡ãƒŧã‚ŋぎ一č˛Ģæ€§ãŒå¤ąã‚ã‚ŒãŸå¤ã„ã‚Ŋフトã‚Ļェã‚ĸである可čƒŊ性がありぞす。čĒ°ã‹ãŒå¤–éƒ¨ã‚­ãƒŧをčŋŊ加するぎをåŋ˜ã‚ŒãŸå ´åˆã€ãã‚Œã¯æš—éģ™ãŽäžå­˜é–ĸäŋ‚である可čƒŊ性もありぞす。åŊŧはそれがつãĒãŒãŖãĻいると思いぞすが、䞋えばåŊŧぎ同僚はそれãĢついãĻįŸĨã‚Šãžã›ã‚“ã€‚ãƒ•ã‚ŖãƒŧãƒĢドもåļį„ļãĢå‘ŧばれ、æŽĨįļšã•れãĻã„ã‚‹ã‹ãŠã†ã‹ã¯ãžãŖãŸãã‚ã‹ã‚Šãžã›ã‚“ã€‚



それからčĒ°ã‹ãŒå…ĨãŖãĻã€ã‚ã‚‹į¨ŽãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚’į›´æŽĨæœŦį•Ēį’°åĸƒãĢčŋŊ加することãĢしぞした。「äģŠã¯é…くãĒりぞすが、速く動äŊœã—始めたらおうãĒるでしょうかīŧŸã€čLJåŧĩしãĻいるかもしれぞせんが、原際ãĢはデãƒŧã‚ŋベãƒŧ゚内でäŊ•かを変更することがありぞす。



ã‚‚ãĄã‚ã‚“ã€ã‚šã‚­ãƒŧマぎį§ģčĄŒã§ã¯ã€ãƒ„ãƒŧãƒĢãĢエナãƒŧãŒã‚ã‚Šãžã™ã€‚æ­Ŗį›´ãĒã¨ã“ã‚ã€į§ã¯ã“ã‚ŒãĢ遭遇しãĻいぞせん。通常、最初ぎ3ã¤ãŽå•éĄŒãŒã‚ã‚Šãžã—ãŸã€‚ãã—ãĻ、おそらくデãƒŧã‚ŋがおぎようãĢčģĸ送されるずきかãĢついãĻぎäģŽåޚãĢおけるより多くぎエナãƒŧ。



非常ãĢ大きãĒã‚ĒブジェクトãƒĸデãƒĢがある場合、すずãĻをåŋĩé ­ãĢįŊŽãã“ã¨ã¯å›°é›Ŗã§ã™ã€‚å¸¸ãĢ最新ぎドキãƒĨãƒĄãƒŗãƒˆã‚’äŊœæˆã™ã‚‹ã“ã¨ã¯å›°é›Ŗã§ã™ã€‚æœ€æ–°ãŽãƒ‰ã‚­ãƒĨãƒĄãƒŗãƒˆã¯ã‚ŗãƒŧドであり、ビジネ゚ロジックが厌全ãĢ記čŋ°ã•れãĻいるとは限りぞせん。つぞり、äŊ•をおぎようãĢ抟čƒŊさせるか、čĒ°ãŒäŊ•ã‚’åŋĩé ­ãĢįŊŽã„ãĻいるかです。







äŊ•ã‚’įĸēčĒã§ããžã™ã‹īŧŸå°‘ãĒくともį§ģčĄŒãŒå§‹ãžã‚‹ã¨ã„ã†äē‹åŽŸã€‚ã“ã‚Œã¯ã™ã§ãĢį´ æ™´ã‚‰ã—ã„ã§ã™ã€‚ãã—ãĻã€ã‚ŗãƒŧドãĢ愚かãĒã‚ŋイプミ゚がãĒいこと。有劚ãĒdowngradeīŧˆīŧ‰ãƒĄã‚Ŋッドがあること、downgradeīŧˆīŧ‰ãƒĄã‚ŊッドがSQLAlchemyãĢã‚ˆãŖãĻäŊœæˆã•れたすずãĻぎデãƒŧã‚ŋã‚ŋイプを削除することをįĸēčĒã§ããžã™ã€‚



SQLAlchemyã¯å¤šããŽį´ æ™´ã‚‰ã—ã„ã“ã¨ã‚’ã—ãžã™ã€‚ãŸã¨ãˆã°ã€ãƒ†ãƒŧブãƒĢã‚’č¨˜čŋ°ã—ãĻEnum列ã‚ŋイプを指厚すると、SQLAlchemyはPostgreSQLでそぎ列挙型ぎデãƒŧã‚ŋã‚ŋイプをč‡Ēå‹•įš„ãĢäŊœæˆã—ぞす。ただし、downgradeīŧˆīŧ‰ãƒĄã‚Ŋッドでこぎデãƒŧã‚ŋã‚ŋã‚¤ãƒ—ã‚’å‰Šé™¤ã™ã‚‹ã‚ŗãƒŧドはč‡Ēå‹•įš„ãĢį”Ÿæˆã•ã‚Œãžã›ã‚“ã€‚



これをčĻšãˆãĻįĸēčĒã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚į§ģčĄŒã‚’ãƒ­ãƒŧãƒĢバックしãĻå†éŠį”¨ã™ã‚‹å ´åˆã€upgradeīŧˆīŧ‰ãƒĄã‚Ŋッドでæ—ĸ存ぎデãƒŧã‚ŋã‚ŋイプをäŊœæˆã—ようとすると、䞋外が゚ロãƒŧされぞす。そしãĻ最も重čρãĒことは、į§ģ行ãĢã‚ˆãŖãĻデãƒŧã‚ŋが変更された場合、ã‚ĸップグãƒŦãƒŧド時ãĢデãƒŧã‚ŋãŒæ­Ŗã—ãå¤‰æ›´ã•ã‚Œã‚‹ã“ã¨ã‚’įĸēčĒã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ãžãŸã€ãƒ€ã‚Ļãƒŗã‚°ãƒŦãƒŧド時ãĢ副äŊœį”¨ãĒしãĢæ­Ŗã—ããƒ­ãƒŧãƒĢバックすることをįĸēčĒã™ã‚‹ã“ã¨ãŒéžå¸¸ãĢ重čĻã§ã™ã€‚







テ゚トč‡ĒäŊ“ãĢé€˛ã‚€å‰ãĢ、テ゚トをäŊœæˆã™ã‚‹ãŸã‚ãŽæœ€å–„ぎæē–å‚™æ–šæŗ•ã‚’čĻ‹ãĻãŋãžã—ã‚‡ã†ã€‚į§ã¯ã“ã‚ŒãĢ寞する多くぎã‚ĸプロãƒŧチをčĻ‹ãĻきぞした。一部ぎäēē々は、ベãƒŧ゚、プãƒŦãƒŧトをäŊœæˆã—、それをすずãĻクãƒĒãƒŧãƒŗã‚ĸãƒƒãƒ—ã™ã‚‹ãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖã‚’äŊœæˆã—ã€ã‚ã‚‹į¨ŽãŽč‡Ēå‹•éŠį”¨ãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖã‚’äŊŋį”¨ã—ãžã™ã€‚ã—ã‹ã—ã€100īŧ…äŋč­ˇã—、厌全ãĢ隔é›ĸされた゚ペãƒŧã‚šã§ãƒ†ã‚šãƒˆã‚’åŽŸčĄŒã™ã‚‹į†æƒŗįš„ãĒæ–šæŗ•ã¯ã€åˆĨぎデãƒŧã‚ŋベãƒŧ゚をäŊœæˆã™ã‚‹ã“とです。



デãƒŧã‚ŋベãƒŧ゚をäŊœæˆãŠã‚ˆãŗå‰Šé™¤ã§ãã‚‹į´ æ™´ã‚‰ã—いsqlalchemy_utilsãƒĸジãƒĨãƒŧãƒĢがありぞす。 PostgreSQLでは、åŊŧはæŦĄãŽã“ともįĸēčĒã—ãžã™ã€‚ã‚¯ãƒŠã‚¤ã‚ĸãƒŗãƒˆãŽ1つが゚ãƒĒãƒŧプįŠļ態ãĢãĒり、切断しãĒã‹ãŖãŸå ´åˆã€ã€ŒčĒ°ã‹ãŒãƒ‡ãƒŧã‚ŋベãƒŧ゚をäŊŋį”¨ã—ãĻいぞす。デãƒŧã‚ŋベãƒŧ゚をäŊŋį”¨ã—ãĻäŊ•もできぞせん。削除できぞせん」というエナãƒŧã§ã‚¯ãƒŠãƒƒã‚ˇãƒĨすることはありぞせん。äģŖã‚ã‚ŠãĢ、åŊŧはčĒ°ãŒãã‚Œã‚‰ãĢæŽĨįļšã—ãŸã‹ã‚’å†ˇé™ãĢįĸēčĒã—ã€ã“ã‚Œã‚‰ãŽã‚¯ãƒŠã‚¤ã‚ĸãƒŗãƒˆã‚’åˆ‡æ–­ã—ã€å†ˇé™ãĢベãƒŧ゚を削除しぞす。



デãƒŧã‚ŋベãƒŧã‚šã‚’æ§‹į¯‰ã—ã€å„ãƒ†ã‚šãƒˆãĢį§ģčĄŒã‚’éŠį”¨ã™ã‚‹ã“ã¨ã¯ã€åŋ…ずしもčŋ…速ãĒプロã‚ģ゚ではありぞせん。これはæŦĄãŽã‚ˆã†ãĢč§Ŗæąēできぞす。PostgreSQLã¯ãƒ†ãƒŗãƒ—ãƒŦãƒŧトからぎ新しいデãƒŧã‚ŋベãƒŧ゚ぎäŊœæˆã‚’ã‚ĩポãƒŧトしãĻいるため、デãƒŧã‚ŋベãƒŧ゚ぎæē–備を2ã¤ãŽãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖãĢåˆ†å‰˛ã§ããžã™ã€‚



æœ€åˆãŽãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖã¯1å›žåŽŸčĄŒã•ã‚Œã€ã™ãšãĻぎテ゚トīŧˆscope = sessionīŧ‰ãŒåŽŸčĄŒã•ã‚Œã€ãƒ‡ãƒŧã‚ŋベãƒŧ゚がäŊœæˆã•れ、それãĢį§ģčĄŒãŒéŠį”¨ã•ã‚Œãžã™ã€‚ 2į•Ēį›ŽãŽãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖīŧˆscope = functionīŧ‰ã¯ã€æœ€åˆãŽãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖãŽãƒ™ãƒŧ゚ãĢåŸēãĨいãĻ、各テ゚トぎベãƒŧã‚šã‚’į›´æŽĨäŊœæˆã—ぞす。



ãƒ†ãƒŗãƒ—ãƒŦãƒŧトからデãƒŧã‚ŋベãƒŧ゚をäŊœæˆã™ã‚‹ãŽã¯éžå¸¸ãĢéĢ˜é€Ÿã§ã€å„ãƒ†ã‚šãƒˆãĢį§ģčĄŒã‚’éŠį”¨ã™ã‚‹æ™‚é–“ã‚’į¯€į´„ã§ããžã™ã€‚







ä¸€æ™‚įš„ãĢデãƒŧã‚ŋベãƒŧ゚をäŊœæˆã™ã‚‹æ–šæŗ•ãĢついãĻčŠąã—ãĻいるだけãĒら、そぎようãĒãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖã‚’æ›¸ãã“ã¨ãŒã§ããžã™ã€‚äŊ•がčĩˇããĻるīŧŸãƒŠãƒŗãƒ€ãƒ ãĒåå‰ã‚’į”Ÿæˆã—ãžã™ã€‚åŋĩぎため、pytestぎ最垌ãĢčŋŊ加しぞす。これãĢより、Posticoをäģ‹ã—ãĻlocalhostãĢį§ģ動したときãĢ、テ゚トãĢã‚ˆãŖãĻäŊœæˆã•れたもぎとäŊœæˆã•れãĒã‹ãŖãŸã‚‚ãŽã‚’į†č§Ŗã§ããžã™ã€‚



æŦĄãĢ、そぎäēēがį¤ēしたデãƒŧã‚ŋベãƒŧ゚へぎæŽĨįļšãĢé–ĸã™ã‚‹æƒ…å ąã‚’åĢむãƒĒãƒŗã‚¯ã‹ã‚‰ã€æ–°ã—ã„ãƒ‡ãƒŧã‚ŋベãƒŧ゚を持つ新しいãƒĒãƒŗã‚¯ã‚’į”Ÿæˆã—ãžã™ã€‚äŊœæˆã—ãĻテ゚トãĢ送äŋĄã—ぞす。äēēがこぎデãƒŧã‚ŋベãƒŧ゚を操äŊœã—た垌、それを削除しぞす。







こぎデãƒŧã‚ŋベãƒŧ゚ãĢæŽĨįļšã™ã‚‹ãŸã‚ãĢã‚¨ãƒŗã‚¸ãƒŗã‚’æē–å‚™ã™ã‚‹ã“ã¨ã‚‚ã§ããžã™ã€‚ã¤ãžã‚Šã€ã“ãŽãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖã§ã¯ã€äžå­˜é–ĸäŋ‚としãĻäŊŋį”¨ã•ã‚ŒãĻいたäģĨå‰ãŽãƒ•ã‚Ŗã‚¯ã‚šãƒãƒŖã‚’å‚į…§ã—ãžã™ã€‚ã‚¨ãƒŗã‚¸ãƒŗã‚’äŊœæˆã—ãĻテ゚トãĢ送äŋĄã—ぞす。







では、おぎようãĒテ゚トを書くことができぞすかīŧŸæœ€åˆãŽãƒ†ã‚šãƒˆã¯ã€į§ãŽåŒåƒšãŽį´ æ™´ã‚‰ã—いį™ē明です。į™ģ場しãĻから、į§ģčĄŒãŽå•éĄŒã‚’åŋ˜ã‚ŒãĻã—ãžãŖãŸã‚ˆã†ã§ã™ã€‚



これは非常ãĢį°Ąå˜ãĒテ゚トです。プロジェクトãĢ一åēĻčŋŊ加しぞす。それはGitHubぎプロジェクトãĢありぞす..。あãĒたはそれをあãĒたãĢドナッグしãĻã€ãŠãã‚‰ãå•éĄŒãŽį´„80パãƒŧã‚ģãƒŗãƒˆã‚’čŋŊ加しãĻåŋ˜ã‚Œã‚‹ã“とができぞす。



それは非常ãĢå˜į´”ãĒことをしぞすīŧšãã‚Œã¯ã™ãšãĻぎį§ģčĄŒãŽãƒĒ゚トを取垗し、それらãĢ寞しãĻ反垊を開始しぞす。ã‚ĸップグãƒŦãƒŧド、ダã‚Ļãƒŗã‚°ãƒŦãƒŧド、ã‚ĸップグãƒŦãƒŧドをå‘ŧãŗå‡ēしぞす。







たとえば、5つぎį§ģčĄŒãŒã‚ã‚Šãžã™ã€‚ã“ã‚ŒãŒãŠãŽã‚ˆã†ãĢ抟čƒŊするかčĻ‹ãĻãŋぞしょう。これが最初ぎį§ģčĄŒã§ã™ã€‚į§ãŸãĄã¯ãã‚Œã‚’åŽŸįžã—ãžã—ãŸã€‚æœ€åˆãŽį§ģčĄŒã‚’ãƒ­ãƒŧãƒĢバックし、再åēĻåŽŸčĄŒã—ãžã™ã€‚ã“ã“ã§äŊ•がčĩˇã“ãŖãŸãŽã§ã™ã‹īŧŸåŽŸéš›ã€ã“ã“ã§ã¯ã€ãŸã¨ãˆã°2回はテãƒŧブãƒĢをäŊœæˆã§ããĒã‹ãŖãŸãŸã‚ã€ãƒ€ã‚Ļãƒŗã‚°ãƒŦãƒŧドīŧˆīŧ‰ãƒĄã‚Ŋãƒƒãƒ‰ã‚’æ­Ŗã—ãåŽŸčŖ…ã—ãĻいることがわかりぞした。



あるäēēがいくつかぎデãƒŧã‚ŋã‚ŋイプをäŊœæˆã—た場合、ã‚ŋイプミ゚がãĒく、一čˆŦįš„ãĢは少ãĒくともäŊ•らかぎåŊĸで抟čƒŊするため、それらも削除したことがわかりぞす。



ããŽåžŒã€ãƒ†ã‚šãƒˆãŒé€˛ãŋぞす。åŊŧは2å›žį›ŽãŽį§ģčĄŒã‚’čĄŒã„ã€ã™ããĢåŽŸčĄŒã—ã€1゚テップロãƒŧãƒĢãƒãƒƒã‚¯ã—ã€å†ãŗå‰é€˛ã—ãžã™ã€‚ãã—ãĻ、これはį§ģčĄŒãŽå›žæ•°ã ã‘į™ēį”Ÿã—ãžã™ã€‚



ã“ãŽãƒ†ã‚šãƒˆãŽį›Žįš„ã¯ã€ãƒ‡ãƒŧã‚ŋ構造を変更する際ぎåŸēæœŦįš„ãĒエナãƒŧã€å•éĄŒã‚’čĻ‹ã¤ã‘ã‚‹ã“ã¨ã§ã™ã€‚



階æŽĩはįŠēぎベãƒŧ゚から始ぞり、通常は非常ãĢéĢ˜é€Ÿã§ã™ã€‚ã¤ãžã‚Šã€ã“ãŽãƒ†ã‚šãƒˆã¯ãƒ‡ãƒŧã‚ŋ構造ãĢé–ĸするもぎです。これは、į§ģčĄŒæ™‚ãĢデãƒŧã‚ŋを変更することではありぞせん。しかし、全äŊ“としãĻ、それはあãĒたぎå‘Ŋを非常ãĢよく救うことができぞす。



čŋ…速ãĒäŋŽæ­ŖãŒåŋ…čρãĒ場合は、これがそれです。こぎãƒĢãƒŧãƒĢはです。原則としãĻ、プロジェクトãĢæŒŋå…Ĩã™ã‚‹ã¨ã€į°Ąå˜ãĢãĒりぞす。







こぎテ゚トはæŦĄãŽã‚ˆã†ãĢãĒりぞす。すずãĻぎãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‚’å–åž—ã—ã€Alembicæ§‹æˆã‚’į”Ÿæˆã—ãžã™ã€‚ã“ã‚ŒãŒå‰ãĢčĻ‹ãŸã‚‚ãŽã€alembic.iniãƒ•ã‚Ąã‚¤ãƒĢです。これがget_alembic_configé–ĸ数です。ベãƒŧã‚šã¸ãŽãƒ‘ã‚šã‚’æŒ‡åŽšã—ãŸãŸã‚ã€ã“ãŽãƒ•ã‚Ąã‚¤ãƒĢをčĒ­ãŋ取り、一時ベãƒŧ゚をčŋŊ加しぞす。そぎ垌、Alembicã‚ŗãƒžãƒŗãƒ‰ã‚’äŊŋį”¨ã§ããžã™ã€‚



äģĨ前ãĢåŽŸčĄŒã•ã‚ŒãŸã‚ŗãƒžãƒŗãƒ‰īŧˆalembic upgrade headīŧ‰ã‚‚åމ免ãĢã‚¤ãƒŗãƒãƒŧトできぞす。掋åŋĩãĒがら、こぎ゚ナイドはすずãĻãŽã‚¤ãƒŗãƒãƒŧトãĢéŠåˆã™ã‚‹ã‚ã‘ã§ã¯ã‚ã‚Šãžã›ã‚“ãŒã€į§ãŽč¨€č‘‰ã‚’äŋĄã˜ãĻください。これは、alembic.comãŽã‚¤ãƒŗãƒãƒŧトã‚ĸップグãƒŦãƒŧãƒ‰ã‹ã‚‰ãŽã‚‚ãŽã§ã™ã€‚ãã“ã§č¨­åŽšã‚’įŋģč¨ŗã—ã€ãŠã“ã§ã‚ĸップグãƒŦãƒŧãƒ‰ã‚’čĄŒã†ã‹ã‚’æŒ‡į¤ēしぞす。æŦĄãĢ、「ダã‚Ļãƒŗã‚°ãƒŦãƒŧãƒ‰ã€ã¨č¨€ã„ãžã™ã€‚



ダã‚Ļãƒŗã‚°ãƒŦãƒŧドでは、į§ģčĄŒã¯down_revision、つぞり前ぎãƒĒãƒ“ã‚¸ãƒ§ãƒŗã€ãžãŸã¯ã€Œ-1」ãĢロãƒŧãƒĢバックされぞす。



「-1ã€ã¯ã€įžåœ¨ãŽį§ģčĄŒã‚’ãƒ­ãƒŧãƒĢバックするようãĢAlembicãĢ指į¤ēするåˆĨãŽæ–šæŗ•ã§ã™ã€‚æœ€åˆãŽį§ģčĄŒãŒé–‹å§‹ã•ã‚ŒãŸã¨ããĢ非常ãĢé–ĸé€Ŗæ€§ãŒã‚ã‚Šã€ããŽdown_revisionはNoneですが、AlembicAPIではdowngradeã‚ŗãƒžãƒŗãƒ‰ãĢNoneã‚’æ¸Ąã™ã“ã¨ã¯ã§ããžã›ã‚“ã€‚



そぎ垌、upgradeã‚ŗãƒžãƒŗãƒ‰ãŒå†åēĻåŽŸčĄŒã•ã‚Œãžã™ã€‚



æŦĄãĢ、デãƒŧã‚ŋをäŊŋį”¨ã—ãĻį§ģčĄŒã‚’ãƒ†ã‚šãƒˆã™ã‚‹æ–šæŗ•ãĢついãĻčĒŦ明しぞす。







デãƒŧã‚ŋぎį§ģčĄŒã¯ã€é€šå¸¸ã¯éžå¸¸ãĢå˜į´”ãĢčĻ‹ãˆã‚‹ã‚ˆã†ãĒã‚‚ãŽã§ã™ãŒã€æœ€ã‚‚į—›ã„ã‚‚ãŽã§ã™ã€‚ã‚ã‚‹ãƒ†ãƒŧブãƒĢからデãƒŧã‚ŋを選択、æŒŋå…Ĩ、取垗し、それをわずかãĢį•°ãĒるåŊĸåŧã§åˆĨぎテãƒŧブãƒĢãĢčģĸ送するようãĢčĻ‹ãˆã‚‹ã§ã—ã‚‡ã†-ã‚‚ãŖã¨į°Ąå˜ãĒことはäŊ•でしょうかīŧŸ



こぎテ゚トãĢついãĻã¯ã€å‰ãŽãƒ†ã‚šãƒˆã¨ã¯į•°ãĒり、開į™ēãĢ非常ãĢč˛ģį”¨ãŒã‹ã‹ã‚‹ã¨č¨€ã‚ã‚ŒãĻいぞす。大čĻæ¨ĄãĒį§ģčĄŒã‚’čĄŒãŖãŸã¨ãã€ã™ãšãĻãŽä¸å¤‰æĄäģļをįĸēčĒã™ã‚‹ãŽãĢ6時間かかることがありぞしたが、すずãĻをčĒŦ明しãĻã‚‚å•éĄŒã‚ã‚Šãžã›ã‚“ã€‚ã—ã‹ã—ã€į§ãŒã™ã§ãĢこれらぎį§ģčĄŒã‚’čĄŒãŖãĻã„ãŸã¨ãã€į§ã¯čŊãĄį€ã„ãĻいぞした。







こぎテ゚トはおぎようãĢ抟čƒŊしぞすかīŧŸã‚ĸイデã‚ĸã¯ã€įžåœ¨ãƒ†ã‚šãƒˆã—ãŸã„ã‚‚ãŽãžã§ãŽã™ãšãĻぎį§ģčĄŒã‚’éŠį”¨ã™ã‚‹ã“ã¨ã§ã™ã€‚å¤‰æ›´ã•ã‚Œã‚‹ãƒ‡ãƒŧã‚ŋぎã‚ģットをデãƒŧã‚ŋベãƒŧ゚ãĢæŒŋå…Ĩしぞす。暗éģ™įš„ãĢ変更される可čƒŊ性ぎあるčŋŊ加ぎデãƒŧã‚ŋをæŒŋå…Ĩã™ã‚‹ã“ã¨ã‚’č€ƒãˆã‚‹ã“ã¨ãŒã§ããžã™ã€‚æŦĄãĢ、ã‚ĸップグãƒŦãƒŧドしぞす。デãƒŧã‚ŋãŒæ­Ŗã—ãå¤‰æ›´ã•ã‚ŒãŸã“ã¨ã‚’įĸēčĒã—ã€ãƒ€ã‚Ļãƒŗã‚°ãƒŦãƒŧãƒ‰ã‚’åŽŸčĄŒã—ãĻ、デãƒŧã‚ŋãŒæ­Ŗã—ãå¤‰æ›´ã•ã‚ŒãŸã“ã¨ã‚’įĸēčĒã—ãžã™ã€‚







ã‚ŗãƒŧドはæŦĄãŽã‚ˆã†ãĢãĒりぞす。つぞり、ãƒĒãƒ“ã‚¸ãƒ§ãƒŗãĢã‚ˆã‚‹ãƒ‘ãƒŠãƒĄãƒŧã‚ŋåŒ–ã‚‚ã‚ã‚Šã€ãƒ‘ãƒŠãƒĄãƒŧã‚ŋぎã‚ģãƒƒãƒˆãŒã‚ã‚Šãžã™ã€‚ã“ã“ã§ã‚¨ãƒŗã‚¸ãƒŗã‚’å—ã‘å…Ĩれ、テ゚トを開始するį§ģčĄŒã‚’å—ã‘å…Ĩれぞす。



æŦĄãĢ、テ゚トしたいrev_headです。そしãĻ、3ã¤ãŽã‚ŗãƒŧãƒĢãƒãƒƒã‚¯ã€‚ã“ã‚Œã‚‰ã¯ã€ãŠã“ã‹ã§åŽšįžŠã—ãŸã‚ŗãƒŧãƒĢバックであり、äŊ•ã‹ãŒčĄŒã‚ã‚ŒãŸåžŒãĢå‘ŧãŗå‡ēされぞす。そこでäŊ•がčĩˇã“ãŖãĻいるぎかをįĸēčĒã§ããžã™ã€‚



䞋はおこãĢありぞすかīŧŸ



į§ã¯ãã‚Œã‚’ã™ãšãĻGitHubぎ䞋ãĢčŠ°ã‚čžŧãŋぞした。そこãĢは原際ãĢã¯å¤šããŽã‚ŗãƒŧドはありぞせんが、゚ナイドãĢčŋŊ加するぎは非常ãĢå›°é›Ŗã§ã™ã€‚į§ã¯æœ€ã‚‚åŸēæœŦįš„ãĒことãĢč€ãˆã‚ˆã†ã¨ã—ãžã—ãŸã€‚ GitHubãĢã‚ĸクã‚ģ゚しãĻ、プロジェクトč‡ĒäŊ“でおぎようãĢ抟čƒŊするかをįĸēčĒã§ããžã™ã€‚ã“ã‚ŒãŒæœ€ã‚‚į°Ąå˜ãĒæ–šæŗ•ã§ã™ã€‚



äģ–ãĢæŗ¨æ„ã‚’æ‰•ã†äžĄå€¤ãŒã‚ã‚‹ã‚‚ãŽã¯äŊ•ですかīŧŸčĩˇå‹•時ãĢ、Alembicはčĩˇå‹•されたフりãƒĢダãƒŧでalembic.iniæ§‹æˆãƒ•ã‚Ąã‚¤ãƒĢをæŽĸã—ãžã™ã€‚ã‚‚ãĄã‚ã‚“ã€į’°åĸƒå¤‰æ•°ALEMBIC_CONFIGをäŊŋį”¨ã—ãĻパ゚を指厚できぞすが、これはåŋ…ずしもäžŋ刊でわかりやすいとは限りぞせん。



åˆĨãŽå•éĄŒīŧšãƒ‡ãƒŧã‚ŋベãƒŧ゚ãĢæŽĨįļšã™ã‚‹ãŸã‚ãŽæƒ…å ąã¯alembic.iniで指厚されãĻã„ãžã™ãŒã€å¤šããŽå ´åˆã€č¤‡æ•°ãŽãƒ‡ãƒŧã‚ŋベãƒŧ゚を順į•ĒãĢ操äŊœã™ã‚‹æŠŸčƒŊがåŋ…čĻã§ã™ã€‚ãŸã¨ãˆã°ã€į§ģčĄŒã‚’ã‚šãƒ†ãƒŧジãĢåą•é–‹ã—ãĻから、æœŦį•Ēį’°åĸƒãĢåą•é–‹ã—ãžã™ã€‚ä¸€čˆŦãĢ、SQLALCHEMY_URLį’°åĸƒå¤‰æ•°ã§æŽĨįƒ…å ąã‚’æŒ‡åŽšã§ããžã™ãŒã€ã“ã‚Œã¯ã‚Ŋフトã‚Ļェã‚ĸãŽã‚¨ãƒŗãƒ‰ãƒĻãƒŧã‚ļãƒŧãĢはあぞり明į™Ŋではありぞせん。



ãžãŸã€ã‚¨ãƒŗãƒ‰ãƒĻãƒŧã‚ļãƒŧが「alembic」よりも「$ project $ -db」ãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚Ŗã‚’äŊŋį”¨ã™ã‚‹æ–šãŒã¯ã‚‹ã‹ãĢį›´æ„Ÿįš„ã§ã™ã€‚



プロジェクトぎ䞋をčĻ‹ã‚‹ã¨ãã¯ã€staff-dbãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚Ŗã‚’čĻ‹ãĻください。これはAlembicãŽč–„ã„ãƒŠãƒƒãƒ‘ãƒŧであり、Alembicをã‚Ģ゚ã‚ŋマイã‚ēするもう1ã¤ãŽæ–šæŗ•ã§ã™ã€‚ãƒ‡ãƒ•ã‚ŠãƒĢトでは、プロジェクト内ぎalembic.iniãƒ•ã‚Ąã‚¤ãƒĢをそぎ場所ãĢé–ĸé€Ŗã—ãĻ検į´ĸしぞす。ãƒĻãƒŧã‚ļãƒŧがåŊŧåĨŗã¨å‘ŧんでいるフりãƒĢダãƒŧから、åŊŧåĨŗč‡ĒčēĢãŒæ§‹æˆãƒ•ã‚Ąã‚¤ãƒĢをčĻ‹ã¤ã‘ãžã™ã€‚ãžãŸã€staff-dbはåŧ•æ•°--db-urlをčŋŊ加しぞす。これをäŊŋį”¨ã—ãĻ、デãƒŧã‚ŋベãƒŧ゚ãĢæŽĨįļšã™ã‚‹ãŸã‚ãŽæƒ…å ąã‚’æŒ‡åŽšã§ããžã™ã€‚ãã—ãĻ、重čρãĒことãĢ、一čˆŦįš„ãĢ受けå…ĨれられãĻいる--helpã‚Ēãƒ—ã‚ˇãƒ§ãƒŗã‚’æ¸Ąã—ãĻそれをįĸēčĒã—ãĻください。įĩåą€ãŽã¨ã“ろ、ãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚ŖãŽåå‰ã¯į›´æ„Ÿįš„ã§ã™ã€‚



すずãĻãŽåŽŸčĄŒå¯čƒŊãĒãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚ŗãƒžãƒŗãƒ‰ã¯ã€ã€Œstaff」ãƒĸジãƒĨãƒŧãƒĢぎ名前で始ぞりぞす。RESTAPIã‚’åŽŸčĄŒã™ã‚‹staff-apiと、åŸēæœŦįŠļæ…‹ã‚’įŽĄį†ã™ã‚‹staff-dbです。こぎパã‚ŋãƒŧãƒŗã‚’į†č§Ŗã™ã‚‹ã¨ã€ã‚¯ãƒŠã‚¤ã‚ĸãƒŗãƒˆã¯ãƒ—ãƒ­ã‚°ãƒŠãƒ ãŽåå‰ã‚’æ›¸ãčžŧãŋ、フãƒĢネãƒŧムをåŋ˜ã‚ŒãŸå ´åˆã§ã‚‚、TABキãƒŧをæŠŧã™ã“ã¨ã§åˆŠį”¨å¯čƒŊãĒすずãĻぎãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚Ŗã‚’čĄ¨į¤ēできるようãĢãĒã‚Šãžã™ã€‚į§ã¯ã™ãšãĻã‚’æŒãŖãĻいぞす、ありがとう。



All Articles