限制为来自 SQL 查询的 Return None 值

Restrict To Return None Value from the SQL Query

我正在使用 Odoo ERP,我想限制来自生成 SQL 查询的字典列表中的 return None 值。

form_data = self.read(cr, uid, ids, ['start_date','end_date'], context=context)[0]
sql = "select i.date_invoice, i.number, (select name from res_partner where id=i.partner_id) as partner,i.currency_id, (select name from res_currency where id=i.currency_id) as currency, (select description from account_tax where name=t.name), t.amount, t.base, (t.amount+t.base) as total from account_invoice i, account_invoice_tax t where t.invoice_id = i.id and i.state = 'open' and i.type = 'out_invoice' and i.date_invoice >= '%s' and i.date_invoice <= '%s' order by t.name"%(form_data['start_date'],form_data['end_date']) 

cr.execute(sql)
data = cr.dictfetchall()

生成的结果:

data=[
    {'currency_id': 38, 
    'description': u'GST 7%',
    'number': u'SAJ/2015/0021',
    'date_invoice': '2015-05-05',
    'currency': u'SGD', 
    'amount': 283.08,
    'base': **None**, 
    'partner': u'partner1',
    'total': None},

    {'currency_id': 38, 
    'description': **None**,
    'number': u'SAJ/2015/0021',
    'date_invoice': '2015-05-05',
    'currency': u'SGD',
    'amount': 283.08,
    'base': 4044.0,
    'partner': u'partner1',
    'total': 4327.08},

    {'currency_id': 38,
    'description': **None**,
    'number': u'SAJ/2015/0020',
    'date_invoice': '2015-05-04',
    'currency': u'SGD', 
    'amount': 0.0,
    'base': 3550.0,
    'partner': u'EAST MARINE PTE LTD', 
    'total': 3550.0},

    {'currency_id': 38,
    'description': **None**,
    'number': u'SAJ/2015/0021', 
    'date_invoice': '2015-05-05',
    'currency': u'SGD',
    'amount': 0.0, 
    'base': 500.0,
    'partner': u'partner1',
    'total': 500.0},

    {'currency_id': 38, 
    'description': **None**,
    'number': u'SAJ/2015/0023',
    'date_invoice': '2015-05-05',
    'currency': u'SGD',
    'amount': 0.0, 
    'base': 11100.0, 
    'partner': u'partner2',
    'total': 11100.0}

]

以上生成的字典值列表找到 描述 键的值得到 None 使用以上 SQL 查询的结果。

我不想要 None 值,但我不想 None 空白字符串或其他空白 space(空字符串)。

我应该如何限制None值?

您需要使用 COALESCE postgresql 函数处理空值。

form_data = self.read(cr, uid, ids, ['start_date','end_date'], context=context)[0]

sql = """
    select 
        i.date_invoice, 
        i.number, 
        (select name from res_partner where id=i.partner_id) as partner,
        i.currency_id, 
        (select name from res_currency where id=i.currency_id) as currency, 
        COALESCE((select description from account_tax where name=t.name), '') as description, 
        t.amount, 
        t.base, 
        COALESCE((t.amount+t.base),0) as total 
from 
    account_invoice i, account_invoice_tax t 
where 
    t.invoice_id = i.id and 
    i.state = 'open' and 
    i.type = 'out_invoice' and 
    i.date_invoice >= '%s' 
    and i.date_invoice <= '%s' 
order by t.name 
"""%(form_data['start_date'],form_data['end_date'])

cr.execute(sql)
data = cr.dictfetchall()