是否有适用于Python的CSV Quotechar函数,适合批量插入MS SQL Server?

时间:2018-12-30 17:13:41

标签: python sql-server csv pymssql

使用quotechar'|'进行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中应用批量插入时,每行都出现错误,其中包括quotechar:

take a look here

到目前为止,我使用的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

3 个答案:

答案 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设置为(“)。感谢大家努力帮助我!