Python 是否使用SqlAlchemy Flask从数据库中删除一行?
我试图从我的订阅者列表中删除一个用户,但整个订阅者将自动删除 这是我的订阅功能:Python 是否使用SqlAlchemy Flask从数据库中删除一行?,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我试图从我的订阅者列表中删除一个用户,但整个订阅者将自动删除 这是我的订阅功能: 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 )
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
取消订阅功能:
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
如果我试图取消订阅,它应该会删除该特定用户,但在我的情况下,所有用户都会从表中删除,为什么,请,任何人都可以帮助解决这个问题
编辑:
如果我试图从查询中删除客户端\u id,而只是删除用户\u id,则会出现以下错误:
unappedInstanceError:未映射类'\uu内置'\uu.int'
还可以使用db.session.delete(用户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()
如果您正在使用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()
如果您正在使用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()
哦,是的,这很有效,如果你在应用程序中使用多个数据库,引擎似乎更有效,谢谢:)。我在我的模型定义中使用
\uuuu bind\u key\uuuu
来管理多个数据库,如下所示:哦,是的,这很有效,如果你在应用程序中使用多个数据库,引擎似乎更有效,谢谢:)。我在模型定义中使用\uu绑定\u键
来管理多个数据库,如下所示: