在DBF中搜索并更新记录

时间:2015-07-14 14:29:47

标签: python dbf

代码:

#!/usr/bin/python
db = dbf.Dbf("MEST2.DBF")
#LINE TO UPDATE:
rec = db[0]
#PROEST IS A field of my dbf. I'm assigning 1 to this field line 0
rec["PROEST"] = 1
rec.store()
del rec
db.close()

DBF图像表:http://i.stack.imgur.com/1UHE1.jpg

我的问题是我无法按行更改记录,导致产品的位置(PROCOD)可能会有所不同。

获取PROCOD并更改PROEST值的任何建议?

更新:

#!/usr/bin/python

import dbf
db = dbf.Table('MEST2.DBF')
with db:
    procod_idx = db.create_index(lambda rec: (rec.codigo, rec.procod))
    match = procod_idx.search(match='000001')

    # should only be one product with that code
    record = match[0]   
    with record:
        record.proest = 23

但现在的问题是,我如何根据CODIGO字段(股票代码)编辑值。我有多个股票ID:(1,2,5,11)。代码更新只是第一个结果,我需要更新基于CODIGO FIELD的特定记录。

在SQL中将是:“更新PROEST SET 32,其中CODIGO = 11”......或CODIGO = 2

Ethan Furman的

已解决

#!/usr/bin/python

import dbf
db = dbf.Table('MEST2.DBF')
with db:
    procod_idx = db.create_index(lambda rec: (rec.codigo, rec.procod))
    match = procod_idx.search(match=(11, '000001'))
    record = match[0]
    with record:
        record.proest = 25
        record.dt_atualiz = '14/07/15 16:52'

1 个答案:

答案 0 :(得分:2)

您不会说出您使用的dbf个套餐,但它看起来像mine

您要做的是在PROCOD字段上创建一个临时索引,然后您可以搜索它并更新您需要的其他字段:

# untested
import dbf
db = dbf.Table('MEST2.DBF')
with db:
    procod_idx = db.create_index(lambda rec: rec.procod)
    # get a list of all matching records
    match = procod_idx.search(match='000001')
    # should only be one product with that code
    record = match[0]
    with record:
        record.proest = ...
        record.dt_atualiz = ...

如果产品代码不是唯一的,那么上面的"应该只是一个带有该代码注释的产品"是错的。

将索引更改为:

procod_idx = db.create_index(lambda rec: (rec.codigo, rec.procod))

然后搜索:

    match = procod_idx.search(match=(11, '000001'))
    record = match[0]
    ...
    match = procod_idx.search(match=(2, '000001'))
    record = match[0]
    ...