@@ -216,13 +216,25 @@ def export_database(self, filename, include_indexes=False, include_schemata=None
216216 click .style ('{}.{}' .format (schema_name , table_name ), fg = 'white' , bold = True ),
217217 click .style (str (cnt ) + ' records' , fg = 'yellow' )))
218218
219- def import_database (self , filename , include_indexes = True ):
219+ def import_database (self , filename , include_indexes = False , include_schemata = None , exclude_tables = None ):
220220 """
221221
222222 :param filename:
223223 :param include_indexes:
224224 :return:
225225 """
226+ if include_schemata is None :
227+ schemata = sorted (self ._schemata .keys ())
228+ else :
229+ assert type (include_schemata ) == list
230+ schemata = sorted (list (set (include_schemata ).intersection (self ._schemata .keys ())))
231+
232+ if exclude_tables is None :
233+ exclude_tables = set ()
234+ else :
235+ assert type (exclude_tables ) == list
236+ exclude_tables = set (exclude_tables )
237+
226238 with open (filename , 'rb' ) as f :
227239 data = f .read ()
228240 db_data = cbor2 .loads (data )
@@ -232,21 +244,24 @@ def import_database(self, filename, include_indexes=True):
232244 dbpath = self ._dbpath , filename = filename , filesize = len (data )))
233245
234246 with self ._db .begin (write = True ) as txn :
235- for schema_name in self . _schemata :
247+ for schema_name in schemata :
236248 for table_name in self ._schema_tables [schema_name ]:
237- table = self ._schemata [schema_name ].__dict__ [table_name ]
238- if not table .is_index () or include_indexes :
239- if schema_name in db_data and table_name in db_data [schema_name ]:
240- cnt = 0
241- for key , val in db_data [schema_name ][table_name ]:
242- key = table ._deserialize_key (key )
243- val = table .parse (val )
244- table [txn , key ] = val
245- cnt += 1
246- if cnt :
247- print ('{:.<52}: {}' .format (
248- click .style ('{}.{}' .format (schema_name , table_name ),
249- fg = 'white' ,
250- bold = True ), click .style (str (cnt ) + ' records' , fg = 'yellow' )))
251- else :
252- print ('No data to import for {}.{}!' .format (schema_name , table_name ))
249+ fq_table_name = '{}.{}' .format (schema_name , table_name )
250+ if fq_table_name not in exclude_tables :
251+ table = self ._schemata [schema_name ].__dict__ [table_name ]
252+ if not table .is_index () or include_indexes :
253+ if schema_name in db_data and table_name in db_data [schema_name ]:
254+ cnt = 0
255+ for key , val in db_data [schema_name ][table_name ]:
256+ key = table ._deserialize_key (key )
257+ val = table .parse (val )
258+ table [txn , key ] = val
259+ cnt += 1
260+ if cnt :
261+ print ('{:.<52}: {}' .format (
262+ click .style ('{}.{}' .format (schema_name , table_name ),
263+ fg = 'white' ,
264+ bold = True ), click .style (str (cnt ) + ' records' ,
265+ fg = 'yellow' )))
266+ else :
267+ print ('No data to import for {}.{}!' .format (schema_name , table_name ))
0 commit comments