我试图从我的订阅者列表中删除用户,但整个订阅者自动删除。
这是我的订阅功能:
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,则会收到此错误:
UnmappedInstanceError: Class '__builtin__.int' is not mapped
也使用 db.session.delete(user_id( 命令! .
我也创建了这个函数,通过我也得到了同样的错误:
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()
如果您使用的是 flask-sqlalchemy,您可以简化很多内容以利用 sqlalchemy 的强大功能。FWIW 你不应该像这样直接访问引擎,除非你有更高级的用例,你应该使用会话
例如,您已经像这样映射了数据模型:
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()