首页 > 解决方案 > 根据条件语句查询表并取值

问题描述

我正在查询一个表以获取两个值(yesterday_cy_day,yesterday_cy_day2)。我还有另一个条件语句来获取“yesterday_cy_day”。

我想要做的是:如果昨天的日期落在列表“extrareaddays”中的任何值中,那么运行第一个 if 语句。如果日期不在列表中,则运行下面的第二个 if 语句。

我尝试了什么:我尝试将第二个代码块放在 else 语句中,但它们都运行了。

第一个代码:

for extrareadday in extrareaddays:
if extrareadday in extrareadayday_date:
    for col, col2 in zip(extra_read_day1, extra_read_day2):
        yesterday_cy_day = col[8]
        yesterday_cy_day2 = col2[8]
        print("Saturday was an extra read day. We are going to use cycle 
days:", yesterday_cy_day, yesterday_cy_day2)

第二个代码:

for col, col2 in zip(yesterday, friday):
    yesterday_cy_day = col[8]
    friday_cy_day = col2[8]
    if today_day == 'Monday' and today_day in col[18]:
        yesterday_cy_day = friday_cy_day
        print("Today is Monday so we will use Friday's cycle day")
    else:
        yesterday_cy_day = col[8]
        print("Today is not a monday so we will use yesterdays cycle day")

完整代码:

extrareaddays = ['2019-09-21', '2019-09-30', '2019-11-02', '2019-11-30', '2019-12-21']
# Format extra read day date as YYYY_MM-DD
extrareadayday_date = date.today() - timedelta(days=3)
extrareadayday_date = extrareadayday_date.strftime("%Y-%m-%d")


yesterday_date = date.today() - timedelta(days=1)
yesterday_date = yesterday_date.strftime("%Y-%m-%d")
print(yesterday_date)

friday_date = date.today() - timedelta(days=4)
friday_date = friday_date.strftime("%Y-%m-%d")


today_day = date.today()
today_day = today_day.strftime('%A')


yesterday_gregorian_q = """SELECT * FROM table
WHERE to_char(GREGORIAN_DATE, 'YYYY-MM-DD') = '{}'""".format(yesterday_date)
mdwcursor.execute(yesterday_gregorian_q)

friday_gregorian_q = """SELECT * FROM table
WHERE to_char(GREGORIAN_DATE, 'YYYY-MM-DD') = '{}'""".format(friday_date)
mdwcursor2.execute(friday_gregorian_q)

yesterday_cy_date = date.today() - timedelta(days=18)
yesterday_cy_date2 = date.today() - timedelta(days=17)
extra_read_day_gregorian_q = """SELECT * FROM table
WHERE to_char(GREGORIAN_DATE, 'YYYY-MM-DD') = '{}'""".format(yesterday_cy_date)
extra_read_day_gregorian_q2 = """SELECT * FROM table
                WHERE to_char(GREGORIAN_DATE, 'YYYY-MM-DD') = '{}'""".format(yesterday_cy_date2)


yesterday = mdwcursor.fetchall()
friday = mdwcursor2.fetchall()
extra_read_day1 = mdwcursor3.execute(extra_read_day_gregorian_q)
extra_read_day2 = mdwcursor4.execute(extra_read_day_gregorian_q2)

for extrareadday in extrareaddays:
    if extrareadday in extrareadayday_date:
        for col, col2 in zip(extra_read_day1, extra_read_day2):
            yesterday_cy_day = col[8]
            yesterday_cy_day2 = col2[8]
            print("Saturday was an extra read day. We are going to use cycle days:", yesterday_cy_day, yesterday_cy_day2)

for col, col2 in zip(yesterday, friday):
    yesterday_cy_day = col[8]
    friday_cy_day = col2[8]
    if today_day == 'Monday' and today_day in col[18]:
        yesterday_cy_day = friday_cy_day
        print("Today is Monday so we will use Friday's cycle day")
    else:
        yesterday_cy_day = col[8]
        print("Today is not a monday so we will use yesterdays cycle day")

标签: pythonmysql

解决方案


您的主要代码应该看起来像这样调用函数:

for each_date in extrareaddays:
    if each_date in extrareadayday_date:
        first_thing(each_date)
    else:
        second_thing(each_date)

现在你还需要定义上面的函数,所以:

def first_thing(each_date):
    # the code you want to do for the first thing would be here
    # access the date for this loop using `each_date`

def second_thing(each_date):
    # the code you want to do for the second thing would be here
    # access the date for this loop using `each_date`

推荐阅读