我正在编写一个简单的程序,根据在简单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(""UPDATE address_book SET{0}=?WHERE{1}="".format(UPDATE_field,UPDATE_txt(,rec_no(sqlite3.OperationalError:接近"@gmail":语法错误
需要提供给.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))