1

The problem is that I can't get the data from the text file to write to the database.
The text file is organized line by line ex:

John Doe 012-345-6789

As you can see, I've split the text and have all the categories straightened out.
But keep getting errors like InterfaceError: Error binding parameter 0 - probably un supported type or something about writing 47 entries to one field.

Thank you very much in advance.

import sqlite3

conn = sqlite3.connect('phoneNumbers.db')
cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS People ')
cur.execute('CREATE TABLE People (firstname TEXT, lastname TEXT, phonenumber TEXT)')


########

file = open('phoneNumbers.txt', 'r')

try:
    file = open('phoneNumbers.txt', 'r')
except:
    print "File not found"

data = file.read()
data = data.split()

for line in data:
    first = data[0::3]
    last = data [1::3]
    num = data [2::3]


cur.execute('INSERT INTO People (firstname, lastname, phonenumber) VALUES (?, ?, ?)', (first, last, num))
conn.commit()

cur.execute('SELECT firstname, lastname, phonenumber FROM People')
for row in cur:
    print row

conn.close()
1

1 Answer 1

3

There are a few problems with your code:

  1. you are using the name file for your file, this is a built in name and you should rename it
  2. you are opening the file twice, once before the try once in the try
  3. Your actual problem:

first, last and num are lists and execute cannot use lists as parameters. There is an executeManybut I do not like it in this case.

EDIT
Even slicker is reading line by line and using the with command.

with open('phoneNumbers.txt', 'r') as f:
    for line in f:
        data = line.split()
        cur.execute('INSERT INTO People (firstname, lastname, phonenumber) VALUES (?, ?, ?)', (data[0], data[1], data[2]))
        if 'str' in line:
            break

Original I would use a for with an index and then execute the INSERT in the loop like that.

try:
    numbersFile = open('phoneNumbers.txt', 'r')
except:
    print "File not found"

data = numbersFile.read()
data = data.split()

for i in range(0, len(data), 3):
    first = data[i]
    last = data[i+1]
    num = data[i+2]
    cur.execute('INSERT INTO People (firstname, lastname, phonenumber) VALUES (?, ?, ?)', (first, last, num))

conn.commit()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.