예제 #1
0
def add_csv_to_db(filename):
    with open(filename) as csv_file:
        csv_rows = csv.reader(csv_file, delimiter=';')
        i = 0
        types_ok = True
        for row in csv_rows:
            (
                arg_brand,
                arg_sub_brand,
                arg_range_name,
                arg_model,
                arg_variant,
                arg_year,
                arg_price
            ) = row

            try:
                arg_year = int(arg_year)
                arg_price = float(arg_price)
            except ValueError:
                types_ok = False
                print("!! type not ok")

            if types_ok:
                brand, new_brand = Brand.get_or_create(
                    name=arg_brand
                )
                sub_brand, new_sub_brand = SubBrand.get_or_create(
                    name=arg_sub_brand,
                    brand=brand
                )
                range_name, new_range = Range.get_or_create(
                    name=arg_range_name,
                    brand=brand
                )
                model, new_model = Model.get_or_create(
                    name=arg_model,
                    brand=brand
                )
                guitar, new_guitar = Guitar.get_or_create(
                    variant=arg_variant,
                    year=arg_year,
                    price=arg_price,
                    brand=brand,
                    sub_brand=sub_brand,
                    range_name=range_name,
                    model=model
                )

                if new_brand:
                    print(f"Brand added:     {brand.name}")
                if new_sub_brand:
                    print(f"Sub-brand added: {sub_brand.name}")
                if new_range:
                    print(f"Range added:     {range_name.name}")
                if new_model:
                    print(f"Model added:     {model.name}")
                if new_guitar:
                    print(f"Guitar added:    {brand.name} {sub_brand.name} "
                          f"{range_name.name} {model.name} {arg_variant} "
                          f"{arg_year} ${arg_price:.2f}")