Есть ли функция CSV Quotechar, как в Python, подходящая для массовой вставки в MS SQL Server?

Чтение и запись CSV с помощью кавычек '|' в Питоне

Приведенный ниже формат csv позволяет читать и записывать файлы через Python со столбцами, которые содержат указанный разделитель (в данном случае «,»). В этом случае ',' помещается между значениями B второй записи.

ААААА, |В,ВВ|, ССС

Следующий код Python можно использовать, например, для запись строк в файл:

    with open(self.base_uri + filename, 'w') as f:
            writer = csv.writer(f,
                                delimiter=',',
                                quotechar='|',
                                quoting=csv.QUOTE_MINIMAL)

            for row in data_list:
                writer.writerow(row)

Сложности с массовой вставкой в ​​MS SQL Server

При попытке использовать csv.file для применения массовой вставки в MS SQL Server возникает ошибка для каждой строки, где есть кавычки:

посмотрите здесь

Код SQL, который я использовал до сих пор, выглядит следующим образом:

bulk insert DATABASE
from 'C:\Users\XX\Documents\sample.csv'
with
(
rowterminator='\n',
fieldterminator=','
)

У вас есть идеи, как решить эту проблему? Есть ли эквивалент кавычек в Python в MS SQL Server?


Некоторые вопросы по теме: Массовая вставка с квалификатором текста в SQL Server


person M. Straube    schedule 30.12.2018    source источник


Ответы (3)


Думаю, вам нужно FIELDQUOTE:

Указывает символ, который будет использоваться в качестве символа кавычек в CSV-файле. Если он не указан, в качестве символа кавычки будет использоваться символ кавычки ("), как определено в стандарте RFC 4180.

bulk insert DATABASE
from 'C:\Users\XX\Documents\sample.csv'
with
(
rowterminator='\n',
fieldterminator=',',
fieldquote = '|'
)

Если вы используете версию ниже 2017, вы можете создать свой CSV с кавычками, равными " вместо символа вертикальной черты.

person Lukasz Szozda    schedule 30.12.2018
comment
Спасибо за быстрый ответ! Я использую MS SQL Management версии 2014. Поэтому Fieldquote не подходит. Я изменил используемый кавычек, как вы сказали, с символа трубы ( | ) на двойные кавычки ( ). Записи данных теперь выглядят так: AA, BBB, BB, CC Тем не менее. Я получаю те же ошибки при попытке запустить массовую вставку, что и раньше. - person M. Straube; 30.12.2018

Вы можете попробовать файл форматирования: если вы применили кавычки ко второму столбцу... [csvfile] содержит AAAAA, "B, BB", CCC

Create Table csvfile
(
f1 VarChar(10),
f2 VarChar(10),
f3 VarChar(10)
)

BULK INSERT csvfile   
     FROM 'c:\downloads\sample.csv'   
     WITH (FORMATFILE = 'c:\downloads\sample.fmt'); 

образец.fmt

14.0
3
1       SQLCHAR             0       10      ",\""    1     f1       SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR             0       10      "\","    2     f2       SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR             0       10      "\r\n"   3     f3       SQL_Latin1_General_CP1_CI_AS
person level3looper    schedule 30.12.2018

Основываясь на ответе @Lukasz Skoda, я смог найти другое решение. Я установил разделитель на канал ( | ) и кавычки на ( " ). Спасибо всем, кто пытается мне помочь!

person M. Straube    schedule 30.12.2018