【问题标题】:Restrict To Return None Value from the SQL Query限制从 SQL 查询返回无值
【发布时间】:2016-05-02 03:20:32
【问题描述】:

我正在使用 Odoo ERP,我想限制从生成 SQL 查询的字典列表中返回 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}

]

Above Generated List of Dictionary Values 发现 descriptiontotal 键值使用上述 SQL 查询得到 None 结果。

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

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

【问题讨论】:

    标签: python sql postgresql openerp odoo-8


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多