Checking a variable in a mysql table and adjusting numbers

Issue

I have a table in MySQL named set_payment7777. It stores the information of some customers. It stores their surname, an amount, and a variable. This variable is an enum and it can be either N or Y. What I am doing currently is to take the entries that have been done between 2 dates and write them into a file. The code is:

query = "SELECT customer_surname, amount, variable FROM set_payment7777 WHERE date_ >= %s AND date_ <= %s"
mycursor.execute(query, (from_date, to_date))
for row in mycursor:
    file.write("\t".join(map(str, row)))
    file.write("\n")

Now the difficult part, I want if the variable is set to Y I want it to multiply the amount by the number of months between these two dates.

I have achieved to get the number of months:

num_months = (to_date.year - from_date.year) * 12 + (to_date.month - from_date.month)

but I can’t check if the variable is set to Y to multiply the rows I am getting in the for loop by num_months. (if the variable is set to N I want to leave the amount as before) Note: there can be multiple entries that some might have the variable set to Y and some set to N

Solution

Because the result is a container of lists, you use the numerical indexes to access the list elements. If this is too opaque and brittle, you can look into a DictCursor. For now, something like this should work:

query = """SELECT customer_surname, amount, variable 
           FROM set_payment7777 
           WHERE date_ >= %s AND date_ <= %s"""
mycursor.execute(query, (from_date, to_date))
for row in mycursor:
    if row[2].upper() == 'Y':  # i choose to do .upper() or .lower() just in case
        num_months = ((to_date.year - from_date.year) * 12 + 
                      (to_date.month - from_date.month))
        row[1] *= num_months 
    file.write("\t".join(map(str, row)))
    file.write("\n")

Also, you can look into using the csv module for writing a tab-delimited file. This would be the preferable way in general, I think, unless you had a specific need that couldn’t be handled by that module.

Answered By – mechanical_meat

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published