books.book_id =主键
chapters.book_id =外键
我的chapters.book_id应该看看它在图片中的表现吗?
当我进行内部联接时
cur = db.execute("SELECT books.title, chapters.chapter FROM books INNER JOIN chapters ON books.book_id=chapters.book_id")
我只是在屏幕上打印出[]
此代码将html表单中的数据插入到我的数据库
@app.route('/newbook')
def new_book():
return render_template('newbook.html')
@app.route('/addbook', methods=['GET', 'POST'])
def addbook():
db = get_db()
db.execute("INSERT INTO books (title) VALUES (?)",
[request.form['title']])
db.commit()
return redirect(url_for('new_chapter'))
@app.route('/newchapter')
def new_chapter():
return render_template('newchapter.html')
@app.route('/addchapter', methods=['GET', 'POST'])
def addchapter():
db = get_db()
cur = db.execute("SELECT last_insert_rowid()")
book_id = cur.fetchone()
db.execute("INSERT INTO chapters (chapter, book_id) VALUES (?, ?)", [request.form['chapter'], str(book_id)])
db.commit()
return redirect(url_for('new_concepts'))
答案 0 :(得分:0)
查询返回一个类似于表的对象,其中包含(可能)许多行和列。
迭代游标或调用fetchone()
,每一步都会返回一行。
行是包含所有列值的元组。即使有一个列,它的值仍然包含在一个元组中。
要从查询中获取单个值,您必须从元组中提取它:
book_id = db.execute("SELECT last_insert_rowid()").fetchone()[0]
# ^^^
请注意,插入章节后last_insert_rowid()
的返回值会发生变化,因此当您为同一本书插入第二章时,它会爆炸。您必须在插入书籍后立即阅读书籍ID(并且光标的lastrowid
attribute更易于使用)。