限制为来自 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()
我正在使用 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()