使用SQLite python中的变量更新数据

时间:2017-09-16 18:19:02

标签: python sqlite

我试图在python中创建一段代码,允许用户输入他们的用户名,密码和出生日期,然后允许他们更改此信息。这就是我到目前为止所拥有的。

import sqlite3
conn=sqlite3.connect("Database.db")
cursor=conn.cursor()

def createTable():
    cursor.execute("CREATE TABLE IF NOT EXISTS userInfo(username TEXT, password TEXT, dateOfBirth TEXT)")

def enterData():
    inputUser=input("Enter your username")
    inputPass=input("Enter your password")
    inputDoB=input("Enter your date of birth")
    cursor.execute("INSERT INTO userInfo (username, password, dateOfBirth) VALUES (?, ?, ?)",
          (inputUser, inputPass, inputDoB))
    conn.commit()


def modifyData():
    update=input("would you like to change your username")
    if update=="yes":
        newUsername=input("Update your username")
        cursor.execute("UPDATE userInfo SET username='?' WHERE username='?'",(newUsername, user))
        conn.commit

createTable()
enterData()
modifyData()

它允许我输入数据,但我不知道将数据值更新为变量的具体语法。当我尝试运行此代码时,会出现此错误:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 7 supplied.

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

当我复制它并运行发生的第一个错误时,表示未定义变量user。因此,您需要将其从modifyData发送到enterData功能,或者向用户询问。

然后我得到了你提到的错误。只需移除?

周围的单引号即可

代码:

def modify_data():
    update = input('Would you like to change your username[y/N]: ')
    if update.lower() == 'y':
        old_username = input('Old username: ')
        new_username = input('Update your username: ')
        cursor.execute('UPDATE userInfo SET username=? WHERE username=?', (new_username, old_username))
    conn.commit()

顺便说一句,我发现this tool可以帮助您想象它。 (它是免费和开源的)

答案 1 :(得分:-1)

您可能需要raw_input,而不是input

raw_input从标准输入读取数据并返回它。 input()eval(raw_input())相等:即,它将输入评估为Python代码。

我不是100%确定这是否是你的根本问题,如果你已经在输入中使用了引号?或者你可能不是 - 你可以提供这个程序运行的所有输入和输出吗?