Python中在Web开发中如何优雅地删除数据库中的文章?

最近在学习 web 开发,想删除用户文章,以那种方式为最优雅的处理方式啊
我的想法:
1.通过文章标题的 hash 值
2.标题和时间戳结合
3.标题和 ID 值结合

如果可以的话,请 V 友指出你们所用的方式,以及在哪里可以学到类似这种经验的书或文章。谢谢大家
Python中在Web开发中如何优雅地删除数据库中的文章?

40 回复

加一个字段,delete 删除就改成 true


在Web开发里删除数据库文章,核心就两步:处理业务逻辑(比如权限校验),然后执行SQL删除。用Web框架和ORM能让这事儿干净不少。

拿Flask-SQLAlchemy举个例子。假设你有个Article模型,通常会在视图函数里这么干:

from flask import request, jsonify
from your_app import db
from your_app.models import Article

@app.route('/article/<int:article_id>', methods=['DELETE'])
def delete_article(article_id):
    # 1. 先找到要删的文章
    article = Article.query.get_or_404(article_id)

    # 2. 这里做权限检查(比如判断当前用户是不是作者)
    # if current_user.id != article.author_id:
    #     return jsonify({'error': 'Forbidden'}), 403

    # 3. 执行删除
    db.session.delete(article)
    db.session.commit()

    return jsonify({'message': 'Article deleted successfully'}), 200

关键点:

  • get_or_404:找不到文章直接返回404,省得自己处理。
  • 一定要做权限校验:别让用户删别人的东西,上面代码注释部分就是干这个的,根据你的认证系统来写。
  • 事务提交db.session.commit()让删除生效,出错的话可以用db.session.rollback()回滚。

如果想“软删除”(就是不真删数据,只是标记个删除状态),给模型加个is_deleted字段就行,删除时改成True,查数据的时候过滤掉。这样数据能恢复,更稳妥。

总结:用ORM的删除方法,配上权限检查,就是最优雅的删库方式。

删除用户数据一般就是标记一下,不会真正做删除

那相当于用户是不可以删除自己文章吗?只是用 delete 来决定是否隐藏文章,是这样吗?
但是我现在还停留在设计字段,在数据库中查找这一篇文章的阶段。。。


了解了,谢谢。

这种方式是一个用户一个表的类型吗?我是把所有用户的文章放在一个表里面的,这样设计是否合理啊

标记就可以,对用户来说,这就是删掉了.

=.= 一般都是软删除的

谢谢,但是一般我需要通过怎样的方式找到表中的这个值啊。

我今天是第一次知道,一直都是直接删除,(⊙﹏⊙)

逻辑删除代替物理删除~

话说为什么要软删除呢(标记下就当删除了)

文章表加个自增 id,根据自增 id 删除就好了,你是担心删错文章吗

不会有人以为注销了帐号真的是删除了吧?

恩恩,是的,我是准备根据标题找到文章,然后删除这一行,然后用户可能会用相同的标题,就迷茫了。

头像还行

楼主列出的 123 怎么理解?好像和删除并没有关系吧?

我还停留在数据库查找的阶段。。。

truncate 是最爽的

一般都是软删除吧

文章是个表,里面有自增 ID 和用户 id,用户 ID 用来区分谁发的文章,自增 ID 在删除的时候用,别用标题查询删除,因为会重复,不是 unique,容易误删标题一样的文章,删除的时候用个 status 来表示,删除为 0,不删除为 1。获取文章列表的时候,添加个过滤规则 status ==1 就行了。

你说的三点我没怎么理解,一般来讲通过文章 ID 来进行删除就可以。
DELETE FROM table WHERE id = [:id];
或者软删除
UPDATE table SET deleted = 1 WHERE id = [:id];

一般都不是立即删除,属于打标,在查询逻辑中剔除掉删除的即可。

可以配合后台定时任务,处理比如 30 天以前已经打标删除的文章!

你这想的太复杂了,直接根据 id 删除就行





谢谢,问题我已经明白了,直接通过 ID 软删除。

有个疑问哈,逻辑删除的话那对需要删除表的改查都要加个查询字段,会不会太麻烦了,有啥办法能解决这个问题。

伪删除的做法,面向欧盟用户的话,是违反 GDPR 的。

加个 status,不要真的删了,一来破坏了表与表间的关联,二来嘛,数据还是挺重要的,这东西决定了现代互联网的拓扑和连接方式

没数据,你还怎么玩,是不?

#1 #22
软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)

https://www.douban.com/group/topic/36082266/ 是这种?用户注销了,但是用户数据却保留了

是用户自己删除他的文章。现在才发现大家都是用的软删除,汗。。

嗯嗯,如果空间足够大的话,你的做法比较好。

这是什么路子。。。

互联网企业不存在删除操作。。。

写程序的原则是尽可能给自己留后路

isdel 不可能真正删除用户的文章 而且 一般还会保存几个历史版本 QAQ

逻辑删除

软删除

created at,updated at 和 deleted at😂😂

回到顶部