Есть ли функция CSV Quotechar, как в Python, подходящая для массовой вставки в MS SQL Server? - PullRequest
0 голосов
/ 30 декабря 2018

CSV чтение и запись с кавычкой '|'в Python

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

AAAAA, | B, BB |, CCC

Следующий код 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

Ответы [ 3 ]

0 голосов
/ 30 декабря 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'); 

sample.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
0 голосов
/ 30 декабря 2018

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

0 голосов
/ 30 декабря 2018

Полагаю, вам нужно FIELDQUOTE:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...