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 · 3192 次点击
    这是一个创建于 4266 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求是从前端页面中批量获得用户输入的图片名称和图片描述(页面中最多会有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   ·   我们的愿景   ·   实用小工具   ·   2162 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:26 · PVG 08:26 · LAX 17:26 · JFK 20:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.