def push_query(self, model: ModelBase) -> str: full_table = full_table_name(model) fields = fields_dict(model) columns = list(fields.keys()) values = map(LayerQueryModel.quote, [fields[c] for c in columns]) columns_str = ", ".join(columns) values_str = ", ".join(values) return sqlparse.format( f"INSERT INTO {full_table} ({columns_str}) VALUES ({values_str})", reindent=True)
def pop_query(self, model: ModelBase) -> str: full_table = full_table_name(model) fields = fields_dict(model) primary_fields_values = {k: fields[k] for k in table_pk_fields(model)} conditions = [ f"{field} = {LayerQueryModel.quote(value)}" for field, value in primary_fields_values.items() ] conditions_str = " AND ".join(conditions) return sqlparse.format( f"DELETE FROM {full_table} WHERE {conditions_str}", reindent=True)
def with_table(self, table: Type[ModelBase]): full_name = full_table_name(table) self.tables[full_name] = table return self
def test_full_table_name_uses_object_or_class(table, expected): assert full_table_name(table) == expected