2013-05-07 1 views
0
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))") 

에서 작동하지 않는, 그리고 그것은 1. 내가 파이썬으로이 데이터베이스를 만들어 반환, 나는 필드를 확인하기 위해 데이터베이스보기 프로그램을 사용했다. 기본 키에서 텍스트 필드에 이르기까지 모든 것이 올바른 것으로 나타 났으 나 외래 키는 없습니다. user_id를 int로 표시합니다. 또한 삽입 할 때 값을 넣지도 않습니다. 나는 사용자를 삽입하면 행을 만들어야하고 게시물에서 참조가 있어야한다고 생각합니다. 하지만 user_id 필드를 쿼리하면 'none'이 반환됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?sqlite3를 외부 키는 이미에 = 프라 그마 foreign_keys를 사용할 수있는 모든

편집 : 여기 내가이

@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

설명에있는 모든 것이 올바르게 들립니다. 당신의 감정이 잘못되었습니다. 당신이 실제로하고 싶은 것은 무엇입니까? –

+0

사용자 (이름, 전자 메일, 암호) 및 게시물 (본문, 사용자 ID) 테이블을 만들고 싶습니다. 그런 다음 데이터베이스, 게시물 및 누가 게시물을 검색 할 수 있기를 원합니다. html로 쉽게 읽을 수 있도록 표시하고 싶습니다. 나는 테이블 개념을 올바로하고 있다고 생각하지만 완전히 틀릴 수있다. 나는 이것이 다른 사람들이 잘한 방법이라고 생각했다. 사용자 테이블이 업데이트 될 때 외래 키가 자동으로 업데이트되기를 원합니다. "on update cascade"를 시도했지만 도움이되지 않았습니다. – gallly

+0

전파되어야하는 업데이트의 구체적인 예를 보여줄 수 있습니까? –

답변

1

외부 키가 기록 사이의 관계를 관리하는 데 사용되는 일을 가지고 방법이다. 그러나 코드에서 삽입 된 두 레코드가 어떤 식 으로든 관련되어 있음을 데이터베이스에 알리지 않았습니다. 당신이 posts 레코드를 새로 삽입 된 ID를 사용할 수 있습니다 첫째 있도록

당신은 users 레코드를 삽입해야합니다

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() 
    ... 

(당신이 정말로 각 게시물에 대한 새 사용자를 만드시겠습니까?)

+0

도움을 주셔서 감사합니다. 정말 감사합니다. :) – gallly