2017-04-14 18 views
0

サブスクライバリストからユーザを削除しようとしていますが、サブスクライバ全体が自動的に削除されています。ここでSqlAlchemy Flaskを使用してデータベースから1行を削除しますか?

がある私の機能を購読:

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 

私はそれがその特定のユーザーを削除する必要が退会しようとしましたが、私の状況であれば全体のユーザーは、テーブルから削除され、なぜ、それは誰ですか、ここで問題を解決するのに役立ちますか?

編集:私は、クエリからのclient_idを削除するには、ちょうどUSER_IDを削除しようとした場合

、私はこのエラーを取得:

db.sessionでも

UnmappedInstanceError: Class '__builtin__.int' is not mapped

。削除(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

関連する問題