class Model(Utils):
    __metaclass__ = ModelMetaclass
    def __init__(self, rid=0, **kwargs):
        if not getattr(self.__class__,'table_name'):
            self.table_name = self.__class__.__name__.lower()
        if getattr(self.__class__,'db_config'):
            self.db_config = getattr(self.__class__,'db_config') 
        else:
            raise NotFindArgv('not find db_config argv')
        for name in self.field_names:
            field = getattr(self.__class__, name.replace("`", ""))
            setattr(self, name.replace("`", ""), field.default)
        for key, value in kwargs.items():
            setattr(self, key.replace("`", ""), value)
        if getattr(self.__class__,'debug'):
            self.debug()
        self.build_conn()

    def build_conn(self):
        self.sqlstore = SqlStore(**self.db_config)
        self.cursor = self.sqlstore.get_cursor()
        
    def debug(self):
        for name in dir(self.__class__):
            print name,'-------',getattr(self.__class__,name)

    @property
    def field_names(self):
        names = []
        for name in dir(self.__class__):
            var = getattr(self.__class__, name.replace("`", ""))
            if isinstance(var, Field):                
                names.append("`%s`"%name)
        return names

    @property
    def field_values(self):
        values = []
        for name in self.field_names:
            value = getattr(self, name.replace("`", ""))
            if isinstance(value, Model):
                value = value.id
            if isinstance(value, str):
                value = value.replace("'", "''")
                try:
                    value = value.decode("gbk")
                except Exception, e:
                    pass
                try:
                    value = value.decode("utf8")
                except Exception, e:
                    pass
            values.append("'%s'" % value)
 def build_conn(self):
     self.sqlstore = SqlStore(**self.db_config)
     self.cursor = self.sqlstore.get_cursor()