cur.execute("CREATE TABLE users(id integer PRIMARY KEY, username TEXT, password TEXT, email TEXT)")
cur.execute("CREATE TABLE posts(id integer PRIMARY KEY, body TEXT, user_id int, FOREIGN KEY(user_id) REFERENCES users(id))")
我已经启用了pragma foreign_keys = on,它返回了1.我用python创建了这个数据库,并使用数据库查看程序来检查字段。它显示从主键到文本字段的所有内容都是正确的,但没有外键。它将user_id显示为int,仅此而已。在插入时我也没有得到任何值。我觉得如果我插入一个用户,它应该创建一行,并在帖子中引用。但是当我查询user_id字段时,它返回'none'。我做错了什么?
编辑:这是我如何工作
@app.route('/add', methods=['POST'])
def add():
c = g.db.execute("INSERT INTO posts(body) VALUES(?)", [request.form['body']])
b = g.db.execute("INSERT INTO users(username) VALUES(?)", [request.form['name']])
get = g.db.execute("SELECT id from users where username=?", [request.form['name']])
id = get.fetchone()
userid=str(id[0])
bet = g.db.execute("SELECT id from posts where body=?", [request.form['body']])
bid = bet.fetchone()
postid = str(bid[0])
e = g.db.execute("UPDATE posts SET user_id = (?) where id = (?) ", [userid,postid])
g.db.commit()
flash('subbmited')
return redirect(url_for('home'))
答案 0 :(得分:1)
外键用于管理记录之间的关系。 但是,在您的代码中,您没有告诉数据库两个插入的记录是否以任何方式相关。
您应首先插入users
记录,以便可以使用新插入的posts
记录ID:
def add():
cursor = g.db.cursor()
cursor.execute("INSERT INTO users(username) VALUES(?)", [request.form['name']])
g.db.execute("INSERT INTO posts(body, user_id) VALUES(?,?)",
[request.form['body'], cursor.lastrowid])
g.db.commit()
...
(你真的想为每个帖子创建一个新用户吗?)