数据库外键中的<sqlite3.row object =“”at =“”>

时间:2017-09-04 19:01:12

标签: python flask sqlite

enter image description here

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'))

1 个答案:

答案 0 :(得分:0)

查询返回一个类似于表的对象,其中包含(可能)许多行和列。

迭代游标或调用fetchone(),每一步都会返回一行。

行是包含所有列值的元组。即使有一个列,它的值仍然包含在一个元组中。

要从查询中获取单个值,您必须从元组中提取它:

book_id = db.execute("SELECT last_insert_rowid()").fetchone()[0]
#                                                            ^^^

请注意,插入章节后last_insert_rowid()的返回值会发生变化,因此当您为同一本书插入第二章时,它会爆炸。您必须在插入书籍后立即阅读书籍ID(并且光标的lastrowid attribute更易于使用)。