Gilles Ganault wrote:
> 
>       It's probably trivial but I'm having a difficult time using Python
> to import a tab-delimited file into SQLite because some columns might
> be empty, so the INSERT string should contain NULL instead of "NULL".
> 

One thing you can do is let the import utility insert the string "NULL" 
for the null records and then change them to real nulls after the fact 
using an update statement.

   update table
   set column = null
   where column = 'NULL';


> Does someone have working code handy that can parse through each line,
> check each column, and if found empty, build the right INSERT?
> 
> Here's my newbie, yucckie, non-working code:
> 
> ======
> import csv
> 
> cr = csv.reader(open("test.tsv","rb"),dialect='excel-tab')
> 
> for row in cr:
>       #INSERT INTO mytable (col1,col2) VALUES (NULL,"My string")
> 
>       sql = "INSERT INTO mytable (col1,col2) VALUES ("
>       for col in row:
>               if col=="":
>                       sql = sql + "NULL"
>               else:
>                       sql = sql + col
>               if not last col:
>                       sql = sql + ","
>               else:
>                       #remove trailing comma
> ======
> 

You probably need to add quotes around the col value here to make it a 
literal string. I seem to remember that the csv reader strips the quotes 
form the strings.

        if col=="":
                sql = sql + "NULL"
        else:
                sql = sql + "'" + col + "'"

I've always found it easier to skip the first comma instead of trying to 
remove the last one.

     fisrt = True
     for col in row:
         if not first:
             sql = sql + ","
         if first:
             first = False
         if col=="":
             sql = sql + "NULL"
         else:
             sql = sql + "'" + col + "'"

HTH
Dennis Cote

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to