下面的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)
当尝试使用csv.file在MS SQL Server中应用批量插入时,每行都出现错误,其中包括quotechar:
到目前为止,我使用的SQL代码如下:
bulk insert DATABASE
from 'C:\Users\XX\Documents\sample.csv'
with
(
rowterminator='\n',
fieldterminator=','
)
您对如何解决此问题有任何想法吗? MS SQL Server中的Python中是否有与quotechar等效的东西?
有关该主题的一些问题: Bulk insert with text qualifier in SQL Server
答案 0 :(得分:0)
我想您需要FIELDQUOTE
:
指定一个字符,该字符将用作CSV文件中的引号字符。如果未指定,则引号字符(“)将用作RFC 4180标准中定义的引号字符。
bulk insert DATABASE
from 'C:\Users\XX\Documents\sample.csv'
with
(
rowterminator='\n',
fieldterminator=',',
fieldquote = '|'
)
如果您使用的版本低于2017,则可以使用Quotechar等于"
而不是管道符号来生成CSV。
答案 1 :(得分:0)
您可以尝试使用格式文件:如果您在第二列上加上了引号... [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
答案 2 :(得分:0)
基于@Lukasz Skoda的回答,我能够找到另一个解决方案。 我已将定界符设置为竖线(|),并将quotechar设置为(“)。感谢大家努力帮助我!