2017-04-14 9 views
0

구독자 목록에서 사용자를 삭제하려고 시도했지만 전체 구독자가 자동으로 삭제됩니다. 여기SqlAlchemy Flask를 사용하여 데이터베이스에서 한 행을 삭제 하시겠습니까?

은 내 기능을 구독 :

def subscribe(self, user_id): 
    if not self.is_subscriber(user_id): 
     db.engine.execute(
      subscribers.insert(), 
      client_id = self.id, 
      user_id = user_id 
     ) 
     db.session.commit() 
    else: 
     return False 

탈퇴 기능 : 그하여

def unsubscribe(self, user_id): 
    if self.is_subscriber(user_id): 
     db.engine.execute(
      subscribers.delete(), 
      client_id = self.id, 
      user_id = user_id 
     ) 
     db.session.commit() 
    else: 
     return False 

내가 그것을 특정 사용자를 삭제해야 탈퇴하려했으나 내 상황의 경우 전체 사용자가 테이블에서 삭제 된 이유는 무엇입니까, 제발, 아무도 문제를 해결할 수 있습니다 여기에 ??

편집 :

또한

UnmappedInstanceError: Class '__builtin__.int' is not mapped

db.session 과 :

내가 쿼리에서 CLIENT_ID을 삭제하고 바로 USER_ID를 삭제하려고하면, 난이 오류가 발생합니다. 삭제 (user_id) 명령! . 당신은 당신이 SQLAlchemy의의 힘을 활용하기 위해이 많이 단순화 할 수 flask-sqlalchemy를 사용하는 경우

def unsubscriber(self, user_id): 
    select_subscribers = subscribers.select(
      db.and_(
       subscribers.c.user_id == user_id, 
       subscribers.c.client_id == self.id 
      ) 
    ) 
    rs = db.engine.execute(select_subscribers) 
    return False if rs.rowcount == 0 else db.session.delete(user_id), 
    db.session.commit() 

답변

1

:

또한 내가 같은 오류가 발생하여이 기능을 만들었습니다. FWIW 당신이해야 할 고급 유스 케이스가 없다면 엔진에 직접 액세스하면 안됩니다 use the session

예. 다음과 같이 데이터 모델을 매핑했습니다.

class Subscriber(db.Model): 
    user_id = db.Column(db.Integer, primary_key=true) 
    client_id = .... 
    .... 

    # method to add new subscriber 
    def __init__(self, user_id, client_id) 
     self.user_id = user_id 
     self.client_id = client_id 

@app.route('/subscribe/') 
def subscribe(): 
    # add a subscriber with user id 21, client 543 
    new = Subscriber(21, 543) 
    db.session.add(new) 
    db.session.commit() 

@app.route('/unsubscribe/') 
def unsubscribe(): 
    # remove subscriber 
    Subscriber.query.filter_by(user_id=21, client_id=543).delete() 
    db.session.commit() 
+0

오, 예, 엔진이 응용 프로그램에서 둘 이상의 데이터베이스를 사용하는 경우 효과적이라고 생각합니다. 감사합니다. :) – reznov11

+0

필자는 내 모델 정의에서'__bind_key__'를 사용하여 여러 데이터베이스를 관리합니다 : [** 다중 바인딩 데이터베이스 **] (http://flask-sqlalchemy.pocoo.org/2.1/binds/#binds) – abigperson