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

2016-11-25 22:49:17 +08:00
 kangsgo

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

find=a.obejects.all()

a.id 里面的值格式为:

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

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

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

3309 次点击
所在节点    Python
13 条回复
stamaimer
2016-11-25 23:38:59 +08:00
如果小数点后面固定只有两位的话,可以使用 slice ,如果不固定可以使用正则表达式。
windfarer
2016-11-26 01:05:00 +08:00
RTFM
dtfm
2016-11-26 02:04:52 +08:00
如一楼所言,正则大概可以这么干
先分组 m=re.match(^([\w]+).([\d]+)$,a.id),然后取出其中的 m[1]和 m[2]
guoqiao
2016-11-26 04:20:47 +08:00
难道不是 id1, id2 = id.split('.') 吗?
georgema1982
2016-11-26 04:52:10 +08:00
完全不明白你的需求是什么。 id 本来就是存储和业务无关的内容,你要修改 id 的值干什么?
ericls
2016-11-26 07:20:24 +08:00
先改 model
再手动 migrate 一下
pimin
2016-11-26 07:27:53 +08:00
6L 应该是楼主想要的结果, orm 机制可以看这里
https://tutorial.djangogirls.org/zh/django_orm/
但是我觉得楼主会查询了,应该不会不懂建模吧
kangsgo
2016-11-26 10:23:48 +08:00
@guoqiao 嗯嗯,这个明白,但是这样子弄以后怎么插回对应的位置呢?
kangsgo
2016-11-26 10:49:42 +08:00
@ericls 意思就是数据库里的数据用正则搞一下,然后插入到新的位置,然后加一个 model 么,有没有简便一些的方法?模式好像不能过滤吧,如果模版可以过滤或者用正则就好了
ericls
2016-11-26 12:48:25 +08:00
@kangsgo 如果这个数据只是展示 而不是查询 你也可以直接 override model 的 __init__()
Jblue
2016-11-26 20:19:23 +08:00
@kangsgo 插回对应的位置,数据量不大的话,可以用放进 dict ,再处理。
YaronYang
2016-11-27 10:54:36 +08:00
小白啊,感觉数据量小扔进 dict 直接切片不就完了..
zmrenwu
2016-11-27 18:08:21 +08:00
考虑到数据库表已经存在,你应该再查一下 migrate 的文档,代码楼上已经给出了答案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/323366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX