限制从SQL查询返回无值

时间:2016-05-02 03:20:32

标签: python sql postgresql openerp odoo-8

我正在使用Odoo ERP,我希望从生成SQL查询中限制从Dictionary列表中返回None Value。

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}

]

以上生成的词典值列表发现值的描述总计键使用上述SQL查询得到结果。

我不想要None Value而不是None我想空白字符串或其他空格(空字符串)。

我应该怎么做才能限制无价值。?

1 个答案:

答案 0 :(得分:6)

您需要使用 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()