Ошибка при вставке строки электронной почты в sqlite3 и python Tkinter - PullRequest
1 голос
/ 22 апреля 2020

Я пишу простую программу для обновления баз c дБ на основе данных, введенных на простой GUI. Я использую форматирование строк, но получаю сообщение об ошибке при попытке ввести адрес электронной почты, который, как я знаю, должен быть заключен в двойные кавычки. Я уверен, что решение простое - я просто не знаю, что это такое!

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()

Я получаю эту ошибку:

c .execute ("" "ОБНОВЛЕНИЕ адресная книга SET {0} =? WHERE {1} =? "" ". формат (update_field, update_txt), rec_no) sqlite3.OperationalError: около" @gmail ": синтаксическая ошибка

1 Ответ

2 голосов
/ 22 апреля 2020

То, что нужно передать .format(), путается с тем, что нужно передать c.execute().

Сделайте это в два этапа, чтобы было легче понять.

Вы должны сказать нам, что должно быть rec_field. Это, наверное, что-то вроде id или address_book_id или?

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))
...