限制从SQL查询返回无值

DAS*_*NYA 2 python sql postgresql openerp odoo-8

我正在使用Odoo ERP,我想限制从生成SQL查询中的字典列表返回无值.

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()
Run Code Online (Sandbox Code Playgroud)

生成结果:

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}

]
Run Code Online (Sandbox Code Playgroud)

上面生成的字典值列表发现,使用上面的SQL Query ,值的描述键得到了None结果.

我不想要无值而不是无我想要空白字符串或其他空格(空字符串).

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

Emi*_*td. 6

您需要使用COALESCE postgresql函数处理null值.

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()
Run Code Online (Sandbox Code Playgroud)