请教一下web.py批量更新mysql数据的办法。

2012-08-14 17:18:47 +08:00
 paloalto
需求是从前端页面中批量获得用户输入的图片名称和图片描述(页面中最多会有5张图片),然后根据保存在mysql中的图片url(path)来更新mysql的 imageTitle 和 imageDescribe 字段。



我自己瞎写的:

http://gist.github.com/3347722

这么写的结果就是每张图片的标题和简介都变成一样了:



saveTitleDescribe部分那几个for循环我觉得不应该这么写,但是又不知道正确的写法是什么。
所以请教一下。
3404 次点击
所在节点    Python
7 条回复
ghoulr
2012-08-14 18:39:32 +08:00
如果没看错的话,你的三个数组是长度相等的
for i in xrange(len(imagePath)):
db.update('image', vars=dict(path=imagePath[i]), where='path = $path', imageDescribe=imageDescibe[i], imageTile=imageTitle[i])

这的参数最好是传个tuple数组吧,看起来整齐一点
muzuiget
2012-08-14 18:42:17 +08:00
那个循环方式错了,被第二个循环覆盖了。用索引来循环,或者用先 zip() 一下,把三个数组同索引合并。
paloalto
2012-08-15 00:01:02 +08:00
@ghoulr
@muzuiget
多谢二位的解答,用了@ghoulr 的方式,可以正确update了!
loddit
2012-08-15 01:05:13 +08:00
你这个循环的每一个p的describe和title都被最后一个覆盖了。

如果有一个保存多个对象的方法,我会把参数设计成属性字典的队列
[{image_title:xx, image_describe:xx, image_path:xx},{...}...{...}]

不过我可能会不写这个方法,直接在controller里用这个队列做迭代,去调用 Image.save(image_title,path,)

btw 这代码很不像 python 呀,读着有点晕。

imagePath => 首字母小写+驼峰命名好奇怪,一般“形参”都用小写。
class media_describe => class 反倒应该用驼峰

参考 http://www.python.org/dev/peps/pep-0008/
alsotang
2012-08-15 02:09:39 +08:00
@loddit 对的,楼主的编程规范有点问题。
web.input(image_title=[],image_describe=[],path={}) 和
def saveTitleDescribe(imagePath, imageTitle, imageDescribe)
的参数都应该加s来表示复数。
and model部分image.py 里面不应该出现saveTitleDescribes这样的方法,model的方法应该是针对个体的。所以楼主想要实现的逻辑最好是在MVC的C当中迭代实现。(毕竟楼主要解决的问题没法一次性批量操作,所以无论实现在C还是M里面,效率差不多)
paloalto
2012-08-15 02:32:30 +08:00
@loddit @alsotang 字典我还没用过呢(python零基础的人掩面)。我的代码都是在网上东找找西找找拼起来的,如果报错了,就去根据错误提示google,google不到就来v2ex提问啦。不过既然能解决问题,就不管是什么白猫黑猫了,先把想要的效果实现再说,以后再慢慢从基础学起。我觉得通过这种方式还是能学到不少东西的(比如怎么从mysql读最新注册的10个用户啊,什么判断用来取回密码的key有没有失效啊这些小东西都是这么学的),如果真要是一开始就抱本书跟着教程慢慢学,各种名词各种数据类型啥的,估计我很快就没兴趣了。

至于编程规范、命名方式嘛~~这个~~呃~~~挠头~~既然是自己看,唉,那就能看明白就行了~~吼吼吼~

我现在的做法是,如果涉及到数据库的操作,通通放到M里,不过也没有那么严格啦,有的时候M里还掺杂了C的东西。这个嘛~等以后再说啦,如果以后有高手加入这个项目,就让他把网站全部重写!哈哈哈哈哈!(邪恶的笑!
alsotang
2012-08-25 23:43:30 +08:00
@paloalto 大哥你其实是可以发个网址出来大家围观一下的。

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

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

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

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

© 2021 V2EX