Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
OpenStackµÄÊý¾Ý¿â¿ª·¢»ù´¡ ¡ª SQLAlchemy
 
×÷ÕߣºWang, Wei  À´Ô´;ÓÐÔÆ²©¿Í ·¢²¼ÓÚ 2016-7-20
  3211  次浏览      27
 

 

ǰÑÔ

¶ÔÓÚÒ»¸öÒµÎñϵͳ£¬ÈçºÎ¸ßЧ¡¢Æ½ÎȵØÊ¹ÓÃÊý¾Ý¿âÊÇÿһ¸ö¿ª·¢ÈËÔ±¶¼»áÓöµ½µÄÎÊÌ⣬OpenStack Ò²²»ÀýÍ⣬ÒÔ OpenStack µÄÐéÄâÍøÂç×é¼þ Neutron ΪÀý£¬ÆäÊý¾Ý¿âÉæ¼°¼¸°ÙÕÅ±í£¬ÐèҪά»¤Êý¾Ý¿â°æ±¾½ü°Ù£»Ò»Ð©±íÒòΪÉè¼ÆÔ­ÒòÐγÉÁ˺ܸߵġ°Èȵ㡱£»ÒòΪ OpenStack ÊÇ·Ö²¼Ê½µÄ£¬ÐèÒªÒÔ×îºÃСһµãµÄ´ú¼Û±£Ö¤²Ù×÷ʱµÄÒ»ÖÂÐÔ¡­¡­×îÖØÒªµÄÊÇ£¬Ã¿¸öÈ˵ÄÊý¾Ý¿âˮƽ¶¼²»Ò»Ñù£¬Ôõô±£Ö¤Õû¸ö¿ªÔ´ÉçÇøÊý°ÙÃûÌá½»ÕßÓÐÒ»ÑùµÄÊý¾Ý¿â²Ù×÷·ç¸ñ£¬ÈçºÎά»¤ÕâЩ´úÂ룿

OpenStack ×öΪһ¸öÍêȫʹÓà Python ¿ª·¢µÄÏîÄ¿£¬ÀûÓÃÒÑÓеķḻģ¿éÊÇ¿ª·¢Ê±ÖØÒªµÄÖÐÐÄ˼ÏëÖ®Ò»£¬Í¬Ê±ÎªÁ˱ãÓÚÕû¸öÉçÇø¼¸°ÙÃû±³¾°²»Í¬Ë®Æ½²»Í¬µÄ¿ª·¢ÕßЭ×÷£¬×îÖÕÑ¡ÔñÁË SQLAlchemy ºÍ Alembic ×÷ΪÊý¾Ý¿â¿ª·¢µÄ»ù´¡¡£

Why SQLAlchemy

ÔڻشðΪʲôʹÓà SQLAlchemy ֮ǰ£¬ÎÒÃÇÏÈÅ̵ãÒ»ÏÂĿǰ Python ÄÜÓÃµÄ ORM ¿â£¬ÒòΪÌôÒ»¸ö¿âÔںܴó³Ì¶ÈÉÏʵÔÚÌôÉçÇø£¬ËùÒÔÎÒ°Ñ×îаæµÄ release ʱ¼äҲд³öÀ´£º

Storm£º×îаæ 0.20£¬release ÓÚ 2013 Ä꣬¿ª·¢ÒѾ­±È½Ï³Á¼Å¡­¡­¶ÔÍâ¼üµÄ¸üС¢É¾³ýÒªÇó±È½ÏÆæ¹Ö¡£

SQLObject£º×îаæ 1.7.3£¬release ÓÚ 2014.12.18£¬¿ª·¢ÀúÊ·¾Ã£¬Ä¿Ç°»îÔ¾¶È²»ÊǺܸߡ£

Django¡¯s ORM£ºÀ´×ÔÓÚ Django£¬Django ÄÚÖã¬Ê¹Óà Django ¿ª·¢µÄ»°»áºÜ·½±ã£¬µ«Ëü²»ÄÜÍÑÀë Django ÔËÐУ¬Ò²²»ÄÜ´¦ÀíһЩ¸´ÔÓµÄÇëÇó¡£

peewee£º×îаæ 2.4.4 ·¢²¼ÓÚ2014.12.3£¬ÇáÁ¿·½±ã£¬ÄÚÖà SQLite¡¢MySQLºÍPostgreSQLµÄÖ§³Ö¡£

PonyORM£º×îаæ 0.6£¬release ÓÚ 2014.11.5¡£Ê¹Óà AGPL Ðí¿É¡£ÓÐͼÐλ¯µÄ±à¼­Æ÷¡£·ÇΪ´óÐÍÓ¦ÓÃÉè¼Æ¡£

SQLAlchemy:×îаæ 0.9.8£¬release ÓÚ 2014.10.13£¬ÆóÒµ¼¶ API£¬Éè¼ÆÁé»î¡£¼ÓÈëÁËһЩ×Ô¼ºµÄ¸ÅÄѧϰÇúÏ߽ϸߡ£

×ܽáһϣ¬Storm Ôø¾­Ó¦ÓñȽϹ㷺£¬µ«ÏÖÔÚÉçÇø²»ÔÙ»îÔ¾£¬ºÜÄѱ£Ö¤½«À´Óöµ½ÎÊÌâÄÜ·ñ½»¸øÉçÇø½â¾ö£¬¶øÇÒ Storm ¶ÔÊý¾Ý¿â¼Ü¹¹Í¬²½´¦ÀíµÄ±È½ÏÆæ¹Ö£¬»¹ÓÐÆµ·±²úÉú DDL ²Ù×÷ Ôì³É¿â¼¶ËøÕâЩÎÊÌâÎÞ·¨ÈÃÈË·ÅÐÄ£»SQLObject Ò²ÊÇÒ»¸öºÜ³öÃûµÄ ORM ¿â£¬µ«Óë SQLAlchemy Ïà±È£¬ºóÕßЧÂʸü¸ß£¬¶ÔһЩ¸ß¼¶ÌØÐÔµÄÖ§³Ö²»ÈçºóÕß¡£

SQLAlchemy µÄ¼Ü¹¹

Summary

SQLAlchemy ºÜÓÐÌØÉ«µÄÒ»µã¾ÍÊÇËü¿ÌÒâ±»·ÖΪÁíÖÖÓ÷¨£¬¾ÍÊÇ CORE ºÍ ORM£¬ÕâÊÇÓÉËüµÄ¼Ü¹¹¾ö¶¨µÄ¡£

ÕâÑùµÄ¼Ü¹¹µÄºÃ´¦ÊÇ´øÀ´ÁË Core Óë ORM µÄ½âñîºÍ£¬µ±ÎÒÃÇÐèÒª¸ßÐÔÄÜµÄ SQL Ö´Ðе«ÓÖ²»ÏëÅׯú SQLAlchemy ´øÀ´µÄsession¹ÜÀí¡¢Á¬½Ó³Ø¹ÜÀí¡¢Êý¾Ý¿â¡°ÖÐÁ¢¡±µÄÓï¾ä±àдµÈÕâЩºÃ´¦Ê±ÎÒÃÇ¿ÉÒÔÖ±½ÓÓà CORE¡£Ö±½ÓÓà CORE ÊÇʲôÒâË¼ÄØ£¿ÎÒÃÇ¿´µ½¼Ü¹¹ÀïÖ»ÓÐRational MapperÔÚ CORE Ö®ÉÏ£¬Êµ¼ÊҲȷʵÈç´Ë£¬ÒòΪSchema¡¢SQL Expression Language»¹ÔÚ CORE ÄÚ£¬ËùÒÔʹÓà CORE ¿ÉÒÔÖ±½Óд´¿ SQL Óï¾ä£¬ÎÒÃdzÆÖ®ÎªRaw SQLµÄд·¨£¬Ò²¿ÉÒÔÓÃSQL Expression£¬ºóÕßÒòΪÊÇÏ൱ÓÚд Python ´úÂ룬ËùÒÔ¿ÉÒÔ´øÀ´¸üºÃµØÔĶÁÐԺͿÉά»¤ÐÔ£¬²»¹ýRaw SQL¸üÁé»î£¬ËùÒÔÔںܸ´ÔÓµÄÓï¾äÃæÇ°Raw SQL¾Í¸üÕ¼ÓÅÊÆÁË¡£

ÔÙÍùÏ¿´Õâ¸öͼ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ DBAPI ÊÇÓÉThird party librariesʵÏֵģ¬Ò²¾ÍÊÇ˵ SQLAlchemy ²¢Ã»ÓÐÌṩֱ½ÓÁ¬½ÓÊý¾Ý¿âµÄ¹¦ÄÜ£¬¶øÊÇͨ¹ýµÚÈý·½ÊµÏÖ£º

SQLalchemy ¶ÔdialectÖ§³ÖºÜÈ«£¬¾ÍÒÔ³£¼ûµÄ MySQL ΪÀý£¬¿ÉÒÔÖ§³Ö£º

MySQL-Python¡¢OurSQL¡¢PyMySQL¡¢MySQL Connector/Python¡¢CyMySQL¡¢Google Cloud SQL¡¢PyODBC¡¢zxjdbc for Jython£¬¾ßÌå¿ÉÒÔÔÚ SQAlchemy µÄdialectsÒ³ÃæÀï²éµ½¡£

ÕâÑùÓÐʲô»µ´¦ÄØ£¬×îÃ÷ÏԵľÍÊǵÍЧ¡£ÒòΪ´«Í³ Python ½âÊÍÆ÷ CPython µÄʵÏÖÔ­Òò£¨Ö÷ÒªÊÇ C µÄÎÊÌ⣩³¤µÄº¯Êýµ÷ÓÃÕ»»á´øÀ´ÏÔÖøµØÐÔÄÜÎÊÌâ¡£ ÓÉÓÚ·¾¶¹ý³¤£¬²»¿É±ÜÃâµØµ¼ÖÂÔËÐÐʱµÄ»ºÂý¡£SQLAlchemy »¨Á˺ܾÉÈ¥Ëõ¶Ìµ÷Ó÷¾¶ºÍͨ¹ý C ´úÂë´¦ÀíÐÔÄÜÆ¿¾±£¬Ð§¹û»¹²»´í£¬²»¹ý×îºÃ»¹ÊÇÏ£Íû PyPy Äܹ»¹ã·ºÁ÷ÐÐÆðÀ´£¬Í¨¹ýJIT»º½âÕâ¸öÎÊÌâ¡£

Engine

ÉÏÃæµÄͼ»¹ÊÇÒ»ÕųéÏó³Ì¶È±È½Ï¸ßµÄ£¬ÏÂÃæÎÒϸ½ÚµãµÄ½éÉÜÏ SQLAlchemy µÄEngine¡£

¶ÔÓÚʹÓÃÕßÀ´Ëµ£¬EngineÊǺËÐÄ£¬ÒòΪConnection¡¢ResultProxyÕâЩ¶¼ÊÇÔÚEngineÖ®ºóÉú³ÉµÄ£¬½¨Á¢EngineÔòÓÐÁ½¸öÖØµã£¬¾ÍÊÇPoolºÍDialect£¬Ç°ÕßÊÇ×öÁ¬½Ó³Ø¹ÜÀí£¬ºóÕßÔò¸ºÔðÓë DBAPI µÄ¹µÍ¨£¬ÈçͬÆäÃû×ÖËùʾ£¬¸ºÔð¡°·½ÑÔ¡±Óë¡°ÆÕͨ»°¡±µÄ·­Òë¡£ÉÏͼÊÇÒÔpsycopg2ΪÀýµÄ£¬Ê¹Óà MySQL£¨PyODBC£©Ò²ÊÇÀàËÆµÄ¡£

ͨ¹ýDialectºÍExecutionContextÏò¿ª·¢ÕßÌṩÁËÒ»ÖµĽӿڣ¬Ç°Õß´¦ÀíÁËÊý¾Ý¿âµÄÌØÐÔ£¬±ÈÈçʹÓà PostgreSQL Êý¾Ý¿âÆä Array Êý¾ÝÀàÐÍ¡¢schema¡¢catalogµÈ£¬ºóÕß´¦Àípsycopg2 DBAPI µÄÓ÷¨£¬±ÈÈç unicode ×Ö·û´¦Àí¡¢·þÎñ¶Ë cursor µÄÐÐΪÕâЩ¡£

ËùÒÔ˵£¬DBAPIÖеÄcursorÔÚ SQLAlchemy Öлᱻ°ü×°³ÉExecutionContextºÍResultProxyÀ´Ê¹Óõġ£

Schema

µ±Êý¾Ý¿âµÄÁ¬½ÓºÍ½»»¥´¦ÀíÍêÁË£¬ÏÂÒ»²½¾ÍÊÇÌṩ·ÇÌØ¶¨µÄ±í¡¢×ֶεĽ¨Á¢ºÍ²Ù×÷·½·¨¡£ÎÒÃÇÐèÒªÊ×Ïȶ¨ÒåÔÚÊý¾Ý¿âÖеıíºÍ×ֶε͍Ò壬¼°ËûÃÇÖ®¼äµÄ¹ØÏµ£¬Ò²¾ÍÊÇ Schema¡£¶ÔÓÚÊý¾Ý¿âµÄʹÓÃÀ´Ëµ£¬×î»ù±¾µÄÖÁÉÙÒªÓÐÁ½¸öÔªËØ£¬ÄǾÍÊÇTableºÍColumn£¬SQLAlchemy ʹÓÃÁËÕâÁ½¸öÃû×ÖÀ´ÃèÊö±íºÍ×ֶΡ£¶à¸öColumn×éºÏ³ÉTable£¬È»ºóһЩ Table¹¹³ÉMetaData¡£SchemaµÄ½á¹¹Éè¼ÆÖ÷ÒªÀ´×ÔÓÚ Martin Fowler ׫дµÄ Patterns of Enterprise Application Architecture¡£

´ËÍ⣬TableºÍColumnͬʱ¼Ì³Ð×Ôsqlalchemy.schemaºÍsqlalchemy.sql£¬Ê¹ÓÃʱ¼È¿ÉÒÔÔÚ ORM µÄ·½Ê½ÖÐʹÓã¬Ò²¿ÉÒÔÒÔ SQL Expression Language ʹÓá£ÔÚÏÂͼÖÐÎÒÃÇ¿ÉÒÔ¿´µ½Table´Ósqlalchemy.sqlÖС°¿ÉÒÔselect from¡±µÄÀà¼Ì³Ð£¬Coloumn´Ó¡°¿ÉÒÔÓÃÔÚ SQL expression¡±µÄÀà¼Ì³Ð¡£

±í´ïʽÊ÷

SQLAlchemy ¿ÉÒÔÉú³É½á¹¹·á¸»µÄ¸÷ÖÖÓï¾ä£¬ÕâÊÇÒ»¸ö´Ê·¨·ÖÎöÊ÷£¬ºËÐĽṹÊÇClauseElement¡£

ÔÚ Python ÖУ¬µÃÒæÓÚÆä Magic Method£¬ÎÒÃÇ¿ÉÒÔÓÃ__eq__¡¢__ne__¡¢__le__¡¢__lt__¡¢__add__¡¢__mul__·½±ãµÄÖØÔØÔËËã·û¡£ÒÔ Column Ϊ¶ÔÏóµÄÔËËã·ûÓÉÒ»¸ö mixin ÀàColumnOperatorsʵÏÖÖØÔØ¡£

±àÒë

ÔÚÕâÀ±àÒëÖ¸Éú³É SQL Óï¾ä£¬Ö÷ÒªÓÉCompiledÀàÍê³É£¬Õâ¸öÀàÓÐÁ½¸öºËÐĵÄ×ÓÀ࣬SQLComplierºÍDDLCompiler¡£SQLComplier¸ºÔðÏñSELECT¡¢INSERT¡¢UPDATE¡¢DELETEÕâЩͳ³ÆÎªDQL (data query language) ºÍ DML (data manipulation language)µÄ²Ù×÷·ûµÄäÖȾ£¬DDLCompiler¸ºÔðCREATEºÍDROP£¬Ò»°ã³ÆÎª DDL¡£´ËÍ⣬»¹ÓÐÒ»¸öÀàTypeCompiler´¦ÀíijЩÊý¾Ý¿âµÄÌØÊâÓï·¨¡£

CompiledµÄ×ÓÀඨÒÔÁËһϵÁÐµÄ visit ¿ªÍ·µÄ·½·¨£¬Ã¿Ò»¸ö¶¼Ô´ÓÚÒ»¸öClauseElementµÄÌØ¶¨×ÓÀࡣȻºóCompiled¶ÔÏóά»¤Ãû×Ö¡¢½áºÏ²ÎÊýºÍ×Ó²éѯ£¬×îÖÕÊÇΪÁËÉú³ÉÒ»¸ö SQL ²éѯÓï¾ä¡£

Migration

ÎÒÃÇÏ£ÍûÄÜÏñ¹ÜÀí´úÂëÒ»Ñù¹ÜÀíÊý¾Ý¿â£¬¿ÉÒÔÏñ git Ò»Ñù¸øÊý¾Ý¿â¶¨Òå°æ±¾¡¢Éý/½µ¼¶¡¢´ò±êÇ©£¬¿ÉÒÔô£¿´ð°¸¾ÍÊÇ Alembic¡£

Alembic µÄ×÷ÕßÓë SQLAlchemy ÊÇͬһÈË£¬Ê¹ÓÃÆðÀ´ÓеãÏñ¼ò»¯°æµÄ git£¬ÔÚ db Ŀ¼ÀïÖ´ÐÐ init£¬¾Í¿ÉÒÔ×Ô¶¯Éú³É»ù±¾½á¹¹ºÍÅäÖÃÎļþ¡£ÅäÖÃÍ×µ±ºóʹÓà alembic ¿ÉÒÔÉú³ÉÒ»¸öÊý¾Ý¿âÄ£°æ£¬×÷ΪÕâ¸ö¡°°æ±¾¡±µÄÊý¾ÝÉý/½µ¼¶Îļþ£¬SQLAlchemy »á×Ô¶¯Éú³ÉÆä¡°°æ±¾ºÅ¡±ºÍÀúÊ·¹ØÏµÎÒÃÇËùÐèÒª×öµÄ±ãÖ»ÊÇÓõ÷Óà SQLAlchemy ºÍ Alembic ÌṩµÄ sa ºÍ op ¶¨ÒåÊý¾Ý¿â±í¼´¿É¡£

ÓÐͬѧ¿ÉÄÜÎÊÎÒÔÚ SQLAlchemy ÉÏ×ö¹ýһģһÑùµÄ¶¨ÒåÁË£¬ÊDz»ÊÇÄܲ»ÒªÈÃÎÒÖØ¸´ÀͶ¯°¡£¿»òÕßÔÚÎÒ¸ø SQLAlchemy ×öÍêÐ޸ĺó Alembic Äܲ»ÄÜ×Ô¶¯¡°¸ÐÖª¡±µ½ÕâЩÐÞ¸ÄÈ»ºó×Ô¼ºÉú³É°æ±¾Îļþ°¡£¿´ð°¸ÊÇ¿ÉÒԵģ¬ÅäÖúÃÔªÊý¾ÝÀ´Ô´ºó£¬Alembic ¿ÉÒÔÓèCautogenerate×Ô¶¯Éú³ÉÏàÓ¦µÄ°æ±¾Îļþ¡£

   
3211 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ