migratecreate下令只较真创始文书,sql文书的情节需求咱手动编者。

比如,在付出使用顺序的进程中,会增多一张新表且务须得加进去;>在使用顺序被布局到出产条件后,需求成立一个目来增高查问的性能之类。

**其本相是经过调用冤家兑现同等的sql文句**咱来看下代码:classField(object):def__init__(self,name,column_tyoe):self.name=nameself.column_type=column_tyoedef__str__(self):return\<%s:%s>\%(self.__class__.__name__,self.name)classStringField(Field):def__init__(self,name):super(StringField,self).__init__(name,”varchar(100)”)classIntegerField(Field):def__init__(self,name):super(IntegerField,self).__init__(name,”bigint”)classModelMetaClass(type):def__new__(cls,name,bases,attrs):ifname==”Model”:returntype.__new__(cls,name,bases,attrs)print(\foundmodel:%s\%name)mapping=dictfork,vinattrs.items:ifisinstance(v,Field):print(“Foundmapping:%s==>%s”%(k,v))mappingk=vforkinmapping.keys:attrs.pop(k)attrs\__mappings__\=mappingattrs\__table__\=namereturntype.__new__(cls,name,bases,attrs)classModel(dict,metaclass=ModelMetaClass):def__init__(self,**kwargs):super(Model,self).__init__(**kwargs)def__getattr__(self,key):try:returnselfkeyexceptKeyError:raiseAttributeError(“Moduleobjectshasnoattribute%s”%key)def__setattr__(self,key,value):selfkey=valuedefsave(self):fields=args=fork,vinself.__mappings__.items:fields.append(v.name)args.append(getattr(self,k,None))sql=\insertinto%s(%s)values(%s)\%(self.__table__,”,”.join(fields),”,”.join(str(i)foriinargs))print(“SQL:%s”%sql)print(“ARGS:%s”%str(args))classUser(Model):界说类的特性到列的映照:id=IntegerField(\id\)name=StringField(\username\)email=StringField(\email\)password=StringField(\password\)u=User(id=12345,name=\Batman\,email=\batman@nasa.org\,password=\iamback\)u.save**核情理论:**用元类来创始user类,id、name、email、password等特性。

该下令是用于创始一个migration文书,例如这边咱创始一个`Video`的migration文书:phpthinkmigrate:createVideo复制头次履行Migraton它会提示一部分信息,这边全体统一yes就得以啦。

*–fake-initial:将头次生成的迁徙文书本子号记要在数据库中,但是并决不会真正的履行迁徙本子。

举个案例,如其你是一个中本国人,居中国移民到美国,现时安家在美国。

会通过如次几个步调:1\\.为instance预备CPU、内存储器和磁盘富源2\\.创始instance镜像文书3\\.创始instance的XML界说文书4\\.创始虚构网并启动instance日记记要在/opt/stack/logs/n-cpu.log,辨析留给大伙儿习题。

以后再速决mysql测试的情况。