0

现在我的错误是这样的

  File "/home/bellvantage/Documents/openerp-7.0/openerp-7/openerp/addons/bpl/bpl.py", line 119, in _max_reg_no
    res = cr.fetchone()[0]
TypeError: 'NoneType' object has no attribute '__getitem__'

我有一个名为 bpl_worker 的表。我在 python 代码中调用了一个函数。

def _max_reg_no(self, cr, uid, context=None):
    res = {}
    cr.execute("""
    select COALESCE(register_no, 'W00001') as reg_no        
    from bpl_worker 
    where id in 
    (select coalesce(max(id),0) from bpl_worker)        
    """)
    rows = cr.fetchall()
    if len(rows) == 0:
        return 'W00001'
    else:
        res = rows[0]
        emp_no = str(res)
        emp_int = emp_no[1:6]
        emp_no_int = int(emp_int)
        result = 'W' + (str(emp_no_int + 1).zfill(4))
        return result        

如果表至少有一条记录,则其工作并返回记录。在初始级别无法获取 if null 消息的记录作为输出。请帮我解决这个问题

谢谢

现在我的表如果 null 问题正常。但是在我的记录返回为“W00001”之后,错误出现在以下点

res = cr.fetchone()[0]
4

1 回答 1

1

一、全段:

CASE 
WHEN register_no IS NULL 
    THEN 'Empty' 
ELSE register_no 
    END

可以替换为:

COALESCE(register_no, 'Empty')

Coalesce 是一个众所周知的函数,用于处理行中的空值。还有一个 IFNULL 函数可以满足相同的需求。

据我得到你的问题,你想从一个空表(即不包含行的表)中获取记录。这是行不通的。您可能希望首先检查查询返回的记录数,这可以通过检查cr.rowcount属性或尝试获取所有行并检查结果数组的长度来完成:

rows = cr.fetchall()
if len(rows) == 0: return 'Empty'
于 2013-04-23T06:45:46.240 回答