V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Mrkon
V2EX  ›  Python

在 web 开发中,以那种删除数据库中文章的方式最优雅

  •  
  •   Mrkon · 2018-05-22 09:36:04 +08:00 · 5838 次点击
    这是一个创建于 2376 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习 web 开发,想删除用户文章,以那种方式为最优雅的处理方式啊
    我的想法:
    1.通过文章标题的 hash 值
    2.标题和时间戳结合
    3.标题和 ID 值结合

    如果可以的话,请 V 友指出你们所用的方式,以及在哪里可以学到类似这种经验的书或文章。谢谢大家
    第 1 条附言  ·  2018-05-22 10:43:15 +08:00
    谢谢大家,问题已经解决:
    可以通过文章的 ID 值查找进行删除,但是普遍的删除都为软删除(增加一个判断字段进行打标,然后可以使用定时任务,如 celery,对时间较长的打标文章进行删除)
    第 2 条附言  ·  2018-05-24 11:05:53 +08:00
    根据 @sobigfish 所述的方式更好。

    “”“软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)”“”
    40 条回复    2018-05-22 21:49:47 +08:00
    jennifertxwoodma
        1
    jennifertxwoodma  
       2018-05-22 09:37:42 +08:00
    加一个字段,delete 删除就改成 true
    nullcc
        2
    nullcc  
       2018-05-22 09:37:57 +08:00
    删除用户数据一般就是标记一下,不会真正做删除
    KimJongun
        3
    KimJongun  
       2018-05-22 09:40:36 +08:00
    drop rable + create table
    Mrkon
        4
    Mrkon  
    OP
       2018-05-22 09:41:16 +08:00
    @jennifertxwoodma 那相当于用户是不可以删除自己文章吗?只是用 delete 来决定是否隐藏文章,是这样吗?
    但是我现在还停留在设计字段,在数据库中查找这一篇文章的阶段。。。
    Mrkon
        5
    Mrkon  
    OP
       2018-05-22 09:42:57 +08:00
    @nullcc
    了解了,谢谢。
    Mrkon
        6
    Mrkon  
    OP
       2018-05-22 09:45:35 +08:00
    @KimJongun 这种方式是一个用户一个表的类型吗?我是把所有用户的文章放在一个表里面的,这样设计是否合理啊
    dovme
        7
    dovme  
       2018-05-22 09:47:10 +08:00
    标记就可以,对用户来说,这就是删掉了.
    Mazexal
        8
    Mazexal  
       2018-05-22 09:51:30 +08:00
    =.= 一般都是软删除的
    Mrkon
        9
    Mrkon  
    OP
       2018-05-22 09:51:48 +08:00
    @dovme 谢谢,但是一般我需要通过怎样的方式找到表中的这个值啊。
    Mrkon
        10
    Mrkon  
    OP
       2018-05-22 09:52:42 +08:00
    @Mazexal 我今天是第一次知道,一直都是直接删除,(⊙﹏⊙)
    SbloodyS
        11
    SbloodyS  
       2018-05-22 09:57:17 +08:00
    逻辑删除代替物理删除~
    VoidChen
        12
    VoidChen  
       2018-05-22 09:58:02 +08:00
    话说为什么要软删除呢(标记下就当删除了)
    InternetExplorer
        13
    InternetExplorer  
       2018-05-22 10:00:27 +08:00
    文章表加个自增 id,根据自增 id 删除就好了,你是担心删错文章吗
    5dkgansm
        14
    5dkgansm  
       2018-05-22 10:02:24 +08:00
    不会有人以为注销了帐号真的是删除了吧?
    Mrkon
        15
    Mrkon  
    OP
       2018-05-22 10:06:19 +08:00
    @InternetExplorer 恩恩,是的,我是准备根据标题找到文章,然后删除这一行,然后用户可能会用相同的标题,就迷茫了。
    jennifertxwoodma
        16
    jennifertxwoodma  
       2018-05-22 10:09:38 +08:00
    @KimJongun 头像还行
    clino
        17
    clino  
       2018-05-22 10:12:12 +08:00
    楼主列出的 123 怎么理解?好像和删除并没有关系吧?
    Mrkon
        18
    Mrkon  
    OP
       2018-05-22 10:15:57 +08:00
    @clino 我还停留在数据库查找的阶段。。。
    weizhen199
        19
    weizhen199  
       2018-05-22 10:26:07 +08:00
    truncate 是最爽的
    joeke
        20
    joeke  
       2018-05-22 10:29:21 +08:00
    一般都是软删除吧
    summerwar
        21
    summerwar  
       2018-05-22 10:30:10 +08:00
    文章是个表,里面有自增 ID 和用户 id,用户 ID 用来区分谁发的文章,自增 ID 在删除的时候用,别用标题查询删除,因为会重复,不是 unique,容易误删标题一样的文章,删除的时候用个 status 来表示,删除为 0,不删除为 1。获取文章列表的时候,添加个过滤规则 status ==1 就行了。
    Patrick95
        22
    Patrick95  
       2018-05-22 10:31:06 +08:00
    你说的三点我没怎么理解,一般来讲通过文章 ID 来进行删除就可以。
    DELETE FROM table WHERE id = [:id];
    或者软删除
    UPDATE table SET deleted = 1 WHERE id = [:id];
    balamiao
        23
    balamiao  
       2018-05-22 10:32:29 +08:00
    一般都不是立即删除,属于打标,在查询逻辑中剔除掉删除的即可。

    可以配合后台定时任务,处理比如 30 天以前已经打标删除的文章!
    zzzwwwlll
        24
    zzzwwwlll  
       2018-05-22 10:35:55 +08:00
    你这想的太复杂了,直接根据 id 删除就行
    Mrkon
        25
    Mrkon  
    OP
       2018-05-22 10:38:16 +08:00
    @Patrick95
    @summerwar
    @balamiao
    @zzzwwwlll
    谢谢,问题我已经明白了,直接通过 ID 软删除。
    wemore
        26
    wemore  
       2018-05-22 10:54:03 +08:00 via Android
    有个疑问哈,逻辑删除的话那对需要删除表的改查都要加个查询字段,会不会太麻烦了,有啥办法能解决这个问题。
    iConnect
        27
    iConnect  
       2018-05-22 10:55:23 +08:00
    伪删除的做法,面向欧盟用户的话,是违反 GDPR 的。
    ycz0926
        28
    ycz0926  
       2018-05-22 11:09:48 +08:00
    加个 status,不要真的删了,一来破坏了表与表间的关联,二来嘛,数据还是挺重要的,这东西决定了现代互联网的拓扑和连接方式
    ycz0926
        29
    ycz0926  
       2018-05-22 11:10:20 +08:00
    @ycz0926 没数据,你还怎么玩,是不?
    sobigfish
        30
    sobigfish  
       2018-05-22 11:23:39 +08:00   ❤️ 2
    @jennifertxwoodma #1 @Patrick95 #22
    软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)
    soho176
        31
    soho176  
       2018-05-22 11:30:07 +08:00
    https://www.douban.com/group/topic/36082266/ 是这种?用户注销了,但是用户数据却保留了
    Mrkon
        32
    Mrkon  
    OP
       2018-05-22 15:09:12 +08:00
    @soho176 是用户自己删除他的文章。现在才发现大家都是用的软删除,汗。。
    jennifertxwoodma
        33
    jennifertxwoodma  
       2018-05-22 18:04:23 +08:00
    @sobigfish 嗯嗯,如果空间足够大的话,你的做法比较好。
    andylsr
        34
    andylsr  
       2018-05-22 18:37:46 +08:00 via Android
    @KimJongun 这是什么路子。。。
    andylsr
        35
    andylsr  
       2018-05-22 18:38:10 +08:00 via Android
    @Mrkon 互联网企业不存在删除操作。。。
    qf19910623
        36
    qf19910623  
       2018-05-22 18:39:25 +08:00
    @Mrkon 写程序的原则是尽可能给自己留后路
    CoderGeek
        37
    CoderGeek  
       2018-05-22 18:41:36 +08:00
    isdel 不可能真正删除用户的文章 而且 一般还会保存几个历史版本 QAQ
    loveCoding
        38
    loveCoding  
       2018-05-22 18:46:01 +08:00
    逻辑删除
    lk1ngaa7
        39
    lk1ngaa7  
       2018-05-22 19:33:17 +08:00
    软删除
    Reficul
        40
    Reficul  
       2018-05-22 21:49:47 +08:00 via Android
    created at,updated at 和 deleted at😂😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 18:02 · PVG 02:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.