psycopg2.errors.BadCopyFileFormat: дополнительные данные после последнего ожидаемого столбца, КОНТЕКСТ: COPY blog_fbr_data, строка 155: - PullRequest
0 голосов
/ 03 апреля 2020
    import psycopg2
conn = psycopg2.connect(user="user_1",password="test123",host="127.0.0.1",port="5432",database="testdb")
cur = conn.cursor()
with open(r'/home/cybermakarov/Desktop/fbr/download_files/202033095128395ATL_IT.csv', mode='r', encoding='UTF-8', errors='strict', buffering=1) as f:
    # Notice that we don't need the `csv` module.
    #next(f) # Skip the header row.
    reader = csv.reader(f)
    next(reader)

    #cur.copy 'blog_fbr_data' FROM '/home/cybermakarov/Desktop/fbr/download_files/202033095128395ATL_IT.csv' );


    #database = \COPY ,'blog_fbr_data', from , var = '/home/cybermakarov/Desktop/fbr/download_files/202033095128395ATL_IT.csv', ' CSV HEADER DELIMITER', ',';

    cur.copy_from(f, 'blog_fbr_data', sep=',')
    conn.commit()
    conn.close()
    f.close()
    print("Success commit")

Это мой код для вставки данных из файла .csv, он содержит более 150 000 записей, и я нашел это решение, чтобы решить эту проблему, но когда я попробовал это решение и получил ошибку в строке номер 155 потому что этот столбец содержит "," в некоторых строках из файла CSV, которые содержат объемные данные.

STATUS_CHOICES = (
    ('InActive', 'InActive'),
    ('Active', 'Active'),

)

Vendor_Type = (
    ('Compnay', 'Compnay'),
    ('Individual', 'Individual'),
)


class FBR_Data(models.Model):
    SR_NO = models.IntegerField(default=1)
    NTN_or_CNIC = models.BigIntegerField(primary_key=True)
    Name = models.CharField(max_length=100,  null=True, default=' ')
    Business_Name = models.CharField(max_length=200, null=True, default=' ' )
    #Extended_Business_Name = models.CharField(max_length=100, null=True, default= ' ')

    class Meta:
        verbose_name_plural = "FbrData"

    def __stf__(self):
        return self.FBR_Data

class Vendors_model(models.Model):
    Client_id = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.PROTECT)
    Vendor_Number = models.IntegerField()
    Client_Vendor_Type = models.CharField(max_length=10, choices=STATUS_CHOICES, default='InActive')
    Client_Vendor_Name = models.CharField(max_length=50)
    Client_Vendor_NTN = models.IntegerField()
    Client_Vendor_Status = models.CharField(max_length=10,  choices=STATUS_CHOICES, default='InActive')
    ATL_NTN = models.ForeignKey(FBR_Data, on_delete = models.PROTECT, verbose_name='Fbr_Data', null=True)
    Is_approved = models.BooleanField(default=False)
    is_deleted = models.BooleanField(default=False)

    class Meta:
        verbose_name_plural = "Vendors"

    def __stf__(self):
        return self.Vendors_model





class Fbr_data_and_Vendors_Model(models.Model):
    Id = models.IntegerField()
    fbr_data = models.ForeignKey(FBR_Data, default=1, verbose_name='Fbr_Data', on_delete=models.SET_DEFAULT)
    vendors_model = models.ForeignKey(Vendors_model, default=1, verbose_name='Vendors', on_delete=models.SET_DEFAULT)

    class Meta:
        verbose_name_plural = "fbrData_and_VendorsModel"

    def __stf__(self):
        return self.Fbr_data_and_Vendors_Model

Это модель, я также пытался сохранить нулевые значения, но у меня это не сработало. Пожалуйста, помогите мне решить эту проблему. Высоко ценю ваш вклад в решение этой проблемы. Заранее спасибо.

...