importing csv file into sqlite

Chris Rebert clp at
Thu Dec 18 10:04:03 CET 2008

On Wed, Dec 17, 2008 at 11:20 PM, klia <alwaseem307ster at> wrote:
> klia wrote:
>> hey guys, i have a hug .csv file which i need to insert it into sqlite
>> database using python.
>> my csv data looks like this
>> Birthday2,12/5/2008,HTC,this is my birthday
>> Sea,12/3/2008,kodak,sea
>> birthday4,14/3/2009,samsung,birthday
>> love,17/4/2009,SONY,view of island
>> can any one give me a head start codes.
>> thanks in advance
> guys so far i came out with this but i get this error
> waseem at Linux:~/Project2$ python
> Traceback (most recent call last):
>  File "", line 13, in <module>
>    curse.execute('INSERT INTO photos VALUES (?,?,?,?)',item)
> sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current
> statement uses 4, and there are 1 supplied.
> here's the codes
> import sqlite3
> import csv
> f = open('/home/waseem/Project2/photos.txt')
> csv.field_size_limit(100000) #see below!
> input = csv.reader(f, delimiter='\t')
> conn = sqlite3.connect('/home/waseem/Project2/picutres.db')
> curse = conn.cursor()
> curse.execute('CREATE TABLE photos (Name VARCHAR(100) PRIMARY KEY, Date
> INTEGER, Make VARCHAR(50), Tag VARCHAR(100))')
> for item in input:
>        curse.execute('INSERT INTO photos VALUES (?,?,?,?)',item)

I believe you need to change 'item' to '*item' to expand the list in
the call so that the function gets 4 additional args rather than 1
additional arg that happens to be a list. But as I've never used the
DB-API before, this is just a guess.

Also, you should rename 'input' so that you don't shadow a built-in
function, and you might want to rename 'item' to something like 'row'
to emphasize that it is itself a list of items.


Follow the path of the Iguana...

> curse.commit()

More information about the Python-list mailing list