db.update不更新数据库

时间:2013-08-26 11:45:24

标签: python web.py

我是python和web编程的新手。我试图将包含程序状态条目的数据库行与存储在磁盘中的程序状态同步。但是在数据库hpartDirs中,IS_FULL_PROCESSED列未更新。我解雇了python解释器,但没有意识到我在这里做错了什么。函数调用checkIsHpartProcessed(indexFile)正常工作。

    import web 
    ..
    urls = ( 
    '/hpart/syncdb','hpartSyncDb'
    )
    db = web.database(dbn='mysql',\
                      user=<retracted>,\
                      pw=<retracted>,\
                      db='classifier',\
                      host='localhost')
    ..
    class hpartSyncDb:
            def GET(self):
                    hpartDirs = db.select('hpartDirs')
                    for hpart in hpartDirs:
                            indexFile=os.path.join(hpart.PATH,"index.hpart")
                            print "Updating "+indexFile+"with is hpart processed value"+str(temp) # Added just for debugging purposes
                            temp=checkIsHpartProcessed(indexFile)
                         db.update('hpartDirs',where='ID=$id',id=hpart.ID,IS_FULL_PROCESSED=temp)
                    raise web.seeother('/hpart/showdb')

以下是解释器的输出示例

    Updating /opt/bs/yourfile.html.hpart/index.hpartwith is hpart processed value1
    0.0 (7): UPDATE hpartDirs SET IS_FULL_PROCESSED = '1', id = 1L WHERE ID = <built-in function id>
    0L
    Updating /opt/bs/pr?sid=2oq.hpart/index.hpartwith is hpart processed value-1
    0.0 (8): UPDATE hpartDirs SET IS_FULL_PROCESSED = -1, id = 2L WHERE ID = <built-in function id>

我在这里做错了什么我不明白,请帮忙。

1 个答案:

答案 0 :(得分:0)

您无法通过db.update直接访问变量。

您必须使用vars=将本地变量与vars=locals()一起使用,并在更新查询中使用$ variable,或者按照以下建议指定字典vars={'id': 1, 'foo': 'bar'}

 class hpartSyncDb:
            def GET(self):
                    hpartDirs = db.select('hpartDirs')
                    for hpart in hpartDirs:
                        indexFile=os.path.join(hpart.PATH,"index.hpart")
                        print "Updating "+indexFile+"with is hpart processed value"+str(temp)
                        temp=checkIsHpartProcessed(indexFile)
                        myvar={'id': hpart.id, 'isprocessed': temp} 
                        db.update('hpartDirs',where="ID=$id", IS_FULL_PROCESSED=$temp, vars=myvar)
                    raise web.seeother('/hpart/showdb')

我省略了更新ID,因为似乎在更新期间不应更改ID。