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 = о, и он вернулся через 1. Я создал эту базу данных с питоном, и я использовал программу просмотра базы данных для проверки полей. Он показывал все правильное от первичных ключей, до текстовых полей, но не внешнего ключа. Он отображает user_id как int, не более того. Я также не получаю никаких значений, вставленных в него при создании вставок. Я чувствую, что если я вставляю пользователя, то он должен создать строку и быть ссылкой в сообщениях. Но когда я запрашиваю поле user_id, он возвращает «none». Что я делаю не так?sqlite3 внешний ключ не работает на всех
редактировать: вот как я получил его на работу
@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'))
Все в ваших описаниях звучит правильно. Твои чувства ошибаются. Что вы на самом деле хотите сделать? –
Я хочу создать пользователей таблицы (имя, адрес электронной почты, пароль) и сообщения (body, userid). Затем я хочу получить из базы данных, сообщение и кто сделал сообщение. Чем я хочу отобразить это в html для удобства чтения. Я думаю, что я правильно понимаю концепцию таблицы, но я мог быть совершенно неправ. Я подумал, что так поступают и другие. Я хочу, чтобы внешний ключ автоматически обновлялся при обновлении таблицы пользователей. Я попробовал «на каскаде обновления», но это не помогло. – gallly
Не могли бы вы показать конкретный пример обновления, которое должно быть распространено? –