请教一下web.py批量更新mysql数据的办法。 - V2EX
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
paloalto
V2EX    Python

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

  •  
  •   paloalto 2012-08-14 17:18:47 +08:00 3795 次点击
    这是一个创建于 4880 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求是从前端页面中批量获得用户输入的图片名称和图片描述(页面中最多会有5张图片),然后根据保存在mysql中的图片url(path)来更新mysql的 imageTitle 和 imageDescribe 字段。



    我自己瞎写的:



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



    saveTitleDescribe部分那几个for循环我觉得不应该这么写,但是又不知道正确的写法是什么。
    所以请教一下。
    7 条回复    1970-01-01 08:00:00 +08:00
    ghoulr
        1
    ghoulr  
       2012-08-14 18:39:32 +08:00   1
    如果没看错的话,你的三个数组是长度相等的
    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
        2
    muzuiget  
       2012-08-14 18:42:17 +08:00   1
    那个循环方式错了,被第二个循环覆盖了。用索引来循环,或者用先 zip() 一下,把三个数组同索引合并。
    paloalto
        3
    paloalto  
    OP
       2012-08-15 00:01:02 +08:00
    @ghoulr
    @muzuiget
    多谢二位的解答,用了@ghoulr 的方式,可以正确update了!
    loddit
        4
    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
        5
    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
        6
    paloalto  
    OP
       2012-08-15 02:32:30 +08:00
    @loddit @alsotang 字典我还没用过呢(python零基础的人掩面)。我的代码都是在网上东找找西找找拼起来的,如果报错了,就去根据错误提示google,google不到就来v2ex提问啦。不过既然能解决问题,就不管是什么白猫黑猫了,先把想要的效果实现再说,以后再慢慢从基础学起。我觉得通过这种方式还是能学到不少东西的(比如怎么从mysql读最新注册的10个用户啊,什么判断用来取回密码的key有没有失效啊这些小东西都是这么学的),如果真要是一开始就抱本书跟着教程慢慢学,各种名词各种数据类型啥的,估计我很快就没兴趣了。

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

    我现在的做法是,如果涉及到数据库的操作,通通放到M里,不过也没有那么严格啦,有的时候M里还掺杂了C的东西。这个嘛~等以后再说啦,如果以后有高手加入这个项目,就让他把网站全部重写!哈哈哈哈哈!(邪恶的笑!
    alsotang
        7
    alsotang  
       2012-08-25 23:43:30 +08:00
    @paloalto 大哥你其实是可以发个网址出来大家围观一下的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2019 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 16:12 PVG 00:12 LAX 08:12 JFK 11:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86