【问题标题】:When I add the attribute Auto increment, it wants me to declare the column in my insert statement?当我添加属性自动增量时,它希望我在我的插入语句中声明该列?
【发布时间】:2020-02-09 09:05:47
【问题描述】:

在创建我的表时,我已使用 auto_increment 将 a 列声明为主键。

但是当我在列中插入一行时,它要我添加主键但先声明它,或者当我没有放入主键时,它说我没有给它足够的参数.

几乎我去过的每个网站都告诉我,我不必将主键添加到我的插入语句中,因为它会自动递增,但它似乎没有这样做。

c.execute("""CREATE TABLE IF NOT EXISTS class(

         student_ID INTEGER AUTO_INCREMENT PRIMARY KEY,
         first TEXT,
         last TEXT,
         mark INTEGER,
         target_grade TEXT,
         percentage INTEGER 


)""")

稍后...

c.execute("INSERT INTO class VALUES (?,?,?,?,?)",
          (first,last,mark,target_grade,percentage,)) 

sqlite3.OperationalError: 表类有 6 列但提供了 5 个值

NameError:名称“ID”未定义

【问题讨论】:

    标签: python sqlite primary-key auto-increment


    【解决方案1】:

    您必须在INSERT 语句中包含将接收值的列的名称(当然不包括主键列):

    c.execute("INSERT INTO class (first, last, mark, target_grade, percentage) VALUES (?,?,?,?,?)",(first,last,mark,target_grade,percentage,))
    

    【讨论】:

    • 另外:它是 AUTOINCREMENT 而不是 AUTO_INCREMENT。如果您将 PK 声明为 PRIMARY KEY,它还将创建一个唯一 ID。 percentage 之后的最后一个逗号是不必要的。
    • 这次我没有收到任何错误,但是我的主键列显示为“无”而不是数字...有什么建议吗?
    • @NahilaChowdhury 查看我的评论
    • 从 create 语句中删除 AUTO_INCREMENT。
    • 只要:student_ID INTEGER PRIMARY KEY 就够了,列会自动递增。
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2015-02-15
    • 2021-05-11
    相关资源
    最近更新 更多