2017-01-04 47 views
1

csvファイル内の空白のセルをNULLに変換してSQL Serverテーブルにアップロードしようとしているので、むしろNULLとして表示されます。以下のコードは動作しますが、文字列としてNULLをロードします。 SQLでNULLをロードするようにコードを修正する手助けをしてもらえますか?PythonのCSV空白セルをSQL NULLに変換する

reader = csv.reader(f_in) # setup code 
writer = csv.writer(f_out) 

row = next(reader)   # handle first line (with no replacements) 
writer.writerow(row) 
last_row = row    # always save the last row of data that we've written 
variable = None 

for row in reader:   # loop over the rest of the lines 
    row = [x if x else "NULL" for x, y in zip(row, last_row)] # replace empty strings 
    writer.writerow(row) 
    last_row = row 




with open(outputFileName,'r') as fin: # `with` statement available in 2.5+  
dr = csv.DictReader(fin) # comma is default delimiter   
to_db = [(i['SubFund'], 
     i['Trader'], 
     i['Prime Broker/Clearing Broker']) 

cur.executemany("INSERT INTO Citco_SPOS (" + 
      "subfund, " + 
      "trader, " + 
      "prime_broker_clearing_broker, " + + 
      "VALUES (?, ?, ?);", to_db) 
con.commit() 
+0

を動作するはずです:http://stackoverflow.com/questions/1149665/how-do-you-insert-null-values-into-sql-server –

+0

からPython私は 'None'だと思うだろうが、確かに' 'NULL ''ではない。しかし、それは推測です。 – roganjosh

+0

あなたの作家は何ですか?どのようにデータを出力していますか - 実行されるSQLコマンド、インポートされるデータ要素、Direct-to-SQL Serverライターの何らかの形式、または? –

答えて

1

これは、おそらく便利

import pyodbc 
import csv 
cnxn = pyodbc.connect(connection string) 
cur = cnxn.cursor() 
query = "insert into yourtable values(?, ?)" 
with open('yourfile.csv', 'rb') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',') 
    for row in reader: 
     for i in range(len(row)): 
      if row[i] == '': 
       row[i] = None 
     cur.execute(query, row) 
    cur.commit() 
+0

私は上記のアプローチを試みましたが、うまくいきません。 SQLデータベースにまだ空白が表示されます。 – Partha

+0

Promod - ソリューションが機能します。私はコードで少し修正する必要がありましたが、それは技術的には正しい解決策です。ありがとう。私は答えの作業バージョンを編集しました。再度、感謝します。 – Partha

関連する問題