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
kangsgo
V2EX  ›  Python

python/Django 如何修改数据里的部分值?

  •  
  •   kangsgo · 2016-11-25 22:49:17 +08:00 · 3269 次点击
    这是一个创建于 2915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上搜了好久没有搜到,例如我有一个数据表:

    find=a.obejects.all()
    

    a.id 里面的值格式为:

    ESN00000.11
    ESN246554.12
    ESN89728975.13
    ESN123131.12
    .....
    

    我想把点后面的值删除,然后对应增加到新的 a.id2 中

    这个可行吗?脑袋快烂了````

    13 条回复    2016-11-27 18:08:21 +08:00
    stamaimer
        1
    stamaimer  
       2016-11-25 23:38:59 +08:00 via iPhone
    如果小数点后面固定只有两位的话,可以使用 slice ,如果不固定可以使用正则表达式。
    windfarer
        2
    windfarer  
       2016-11-26 01:05:00 +08:00 via Android
    RTFM
    dtfm
        3
    dtfm  
       2016-11-26 02:04:52 +08:00 via Android
    如一楼所言,正则大概可以这么干
    先分组 m=re.match(^([\w]+).([\d]+)$,a.id),然后取出其中的 m[1]和 m[2]
    guoqiao
        4
    guoqiao  
       2016-11-26 04:20:47 +08:00
    难道不是 id1, id2 = id.split('.') 吗?
    georgema1982
        5
    georgema1982  
       2016-11-26 04:52:10 +08:00
    完全不明白你的需求是什么。 id 本来就是存储和业务无关的内容,你要修改 id 的值干什么?
    ericls
        6
    ericls  
       2016-11-26 07:20:24 +08:00   ❤️ 1
    先改 model
    再手动 migrate 一下
    pimin
        7
    pimin  
       2016-11-26 07:27:53 +08:00 via Android
    6L 应该是楼主想要的结果, orm 机制可以看这里
    https://tutorial.djangogirls.org/zh/django_orm/
    但是我觉得楼主会查询了,应该不会不懂建模吧
    kangsgo
        8
    kangsgo  
    OP
       2016-11-26 10:23:48 +08:00
    @guoqiao 嗯嗯,这个明白,但是这样子弄以后怎么插回对应的位置呢?
    kangsgo
        9
    kangsgo  
    OP
       2016-11-26 10:49:42 +08:00
    @ericls 意思就是数据库里的数据用正则搞一下,然后插入到新的位置,然后加一个 model 么,有没有简便一些的方法?模式好像不能过滤吧,如果模版可以过滤或者用正则就好了
    ericls
        10
    ericls  
       2016-11-26 12:48:25 +08:00 via iPhone
    @kangsgo 如果这个数据只是展示 而不是查询 你也可以直接 override model 的 __init__()
    Jblue
        11
    Jblue  
       2016-11-26 20:19:23 +08:00
    @kangsgo 插回对应的位置,数据量不大的话,可以用放进 dict ,再处理。
    YaronYang
        12
    YaronYang  
       2016-11-27 10:54:36 +08:00
    小白啊,感觉数据量小扔进 dict 直接切片不就完了..
    zmrenwu
        13
    zmrenwu  
       2016-11-27 18:08:21 +08:00
    考虑到数据库表已经存在,你应该再查一下 migrate 的文档,代码楼上已经给出了答案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3196 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.