Home > front end >  How to automatically unpack list that contains some 0 values?
How to automatically unpack list that contains some 0 values?

Time:11-19

When I try to unpack a list data for a MySQL database query that has some columns with value 0, I get an error.

Name (varchar) Apples(int) Candies(int) Color (varchar)
John 5 0 Blue

If I unpack my query result like:

name, apples, candies, color = mylist

I'll get a NoneType error because candies values (in this example) is considered as None rather than 0.

The workaround I currently have is (which defeats the purpose and benefit of unpacking):

name = mylist[0]
if apples is None:
    apples = 0
else apples = mylist[1]
if candies is None:
    candies = 0
else candies = mylist[2]
color = mylist[3]

So my question is, is there anyway I can unpack mylist when one (or more) items have a value of 0 (and not null or None) without going through each one of them as "if x is None: x = 0"?

CodePudding user response:

You can still using unpacking, just fix up the None values afterward.

name, apples, candies, color = mylist
if apples is None:
    apples = 0
if candies is None:
    candies = 0

If you have lots of columns to fix, you can use a list comprehension to fix up all the None values in the list.

mylist = [0 if x is None else x for x in mylist]
name, apples, candies, color = mylist

I doubt that 0 is really being turned into None, you probably have NULL values in the table. You can use IFNULL() to convert them:

SELECT name, IFNULL(apples, 0), IFNULL(candies, 0), color
FROM tablename
  • Related