user2127168
user2127168

Reputation: 91

Error inserting an email string in sqlite3 and python Tkinter

I am writing a simple program to update a basic db based on data entered on a simple GUI. I'm using string formatting but keep getting an error trying to enter an email address , which I know should be surrounded with double-quotes. I'm sure the solution is simple- I just don't know what it is!

def update_rec():
# Connect to the db
conn = sqlite3.connect("address_book.db")
# create a cursor
c = conn.cursor()
fields = ["f_name", "s_name", "mob", "email"]

# Check which textboxes have data
update_txt = ""
update_field = ""
rec_no = str(id_no.get())

if len(f_name.get()) > 0:
    update_txt = f_name.get()
    update_field = fields[0]
elif len(s_name.get()) > 0:
    update_txt = s_name.get()
    update_field = fields[1]
elif len(mob.get()) > 0:
    update_txt = mob.get()
    update_field = fields[2]
elif len(email.get()) > 0:
    update_txt = email.get()
    update_field = fields[3]
else:
    update_txt = ""
    update_field = ""

c.execute("""UPDATE address_book SET  {0} = ?  WHERE {1} = ?""".format(update_field, update_txt), rec_no)

conn.commit()
conn.close()

I keep getting this error:

c.execute("""UPDATE address_book SET {0} = ? WHERE {1} = ?""".format(update_field, update_txt), rec_no) sqlite3.OperationalError: near "@gmail": syntax error

Upvotes: 1

Views: 645

Answers (1)

mechanical_meat
mechanical_meat

Reputation: 169274

What needs to be supplied to .format() is getting confused with what needs to be passed to c.execute().

Do it in two steps so it's easier to understand.

You need to tell us what rec_field should be. It's probably something like id or address_book_id or ?

rec_field = 'id' # you know what this should be...
qry = """UPDATE address_book 
         SET {0} = ? 
         WHERE {1} = ?;""".format(update_field, rec_field)
c.execute(qry, (update_txt,rec_no))

Upvotes: 2

Related Questions