Flask Python sqlite3:表中的主键是null而不是int

时间:2017-08-28 20:20:27

标签: python flask sqlite

当我将数据输入到表中时,对于主键,我得到null而不是int。我该如何解决这个问题?

这是我的表:

conn.execute('CREATE TABLE lists (listid INT PRIMARY KEY, book TEXT, chapter INT)')

我使用以下代码将数据输入lists

@app.route('/addbook', methods = ['POST', 'GET'])
def addbook():
    if request.method == 'POST':
        bt = request.form['bt']
        bc = request.form['bc']

        con =  sql.connect("seei.db")
        cur = con.cursor()

        cur.execute("INSERT INTO lists (book, chapter) VALUES (?, ?)", (bt, bc))

        con.commit()
        con.close()
        return render_template("addconcepts.html")

和这个html:

<body>

<form action="{{ url_for('addbook') }}" method="POST">
  Book Title<br>
  <input type="text" name="bt" /><br>

  Book Chapter<br>
  <input type="text" name="bc" /><br>
  <input type="submit" name="submit">

</form>

</body>

2 个答案:

答案 0 :(得分:1)

来自SQLite documentation(强调我的):

  

如下所示,如果rowid表有主键,则会出现一个例外情况   它由单个列和该列的声明类型组成   在大写和小写的任何混合物中都是“INTEGER”,然后是列   成为rowid的别名。通常提到这样的列   作为“整数主键”。 PRIMARY KEY列只会成为   如果声明的类型名称恰好是“INTEGER”,则为整数主键。   其他整数类型名称,如“INT”或“BIGINT”或“SHORT INTEGER”或   “UNSIGNED INTEGER”导致主键列表现为   普通表列具有整数亲和力和唯一索引,而不是   rowid的别名。

创建表格为:

CREATE TABLE lists (listid INTEGER PRIMARY KEY, book TEXT, chapter INT)

答案 1 :(得分:-1)

  

cur.execute("INSERT INTO lists (book, chapter) VALUES (?, ?)", (bt, bc))

对于错误的绑定数量,这将产生ProgrammingError。而是使用:

cur.execute("INSERT INTO lists (book, chapter) VALUES (?, ?)", [(bt, bc)])

此外,在CREATE TABLE命令中,您需要将INT更改为INTEGER以获取自动增量行为。