当我将数据输入到表中时,对于主键,我得到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>
答案 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
以获取自动增量行为。