Как использовать значения столбцов из базы данных sql в качестве параметров функции python?

#python #mysql

#python #mysql

Вопрос:

Я пытаюсь проверить, являются ли годы в одном из столбцов моей таблицы movie високосным годом или нет. Если да, я хочу, чтобы название фильма соответствовало ему.

Я попробовал следующий код

 def leap_year(year):
    if year%4==0:
        if(year%100==0):
            if(year%400==0):
                return True
            else:
                return False
        else:
            return True           
    else:
        return False

result=pd.read_sql_query("select m.name from movie m where m.year = {}".format(leap_year(m.year)),conn)

print(result)
 

Я знаю, что это не работает, так как я не могу напрямую передать m.year, но я пытался найти, но не смог найти правильный синтаксис для этого.

Комментарии:

1. Каков ваш формат таблицы? Что это за столбцы? Вашим первым шагом должно быть написание статического запроса, который работает. Затем переведите этот запрос в python. Вы, вероятно, хотите сделать что-то вроде: ...where m.year = '{}'".format(leap_year)... хотя m.year звучит неверно.

2. я в замешательстве. вы пытаетесь выбрать год из базы данных, где год равен году?

3. итак, таблица фильмов содержит следующие столбцы: название, год. Я хочу извлечь значение года из столбца и использовать его в моей функции leap_year и проверить, является ли его скачком или нет. если это скачок, я хочу напечатать название фильма, соответствующего этому году. конечно, за один год выходит много фильмов

Ответ №1:

Использовать calendar

 import calendar

def leapyear(year):
    result = calendar.isleap(year)
    if result == True:
        print(str(year)   ' is a leap year')
    else:
        print(str(year)   ' is not a leap year')

leapyear(2018)
 

используйте год вашего столбца sql в качестве ввода года для функции

Ответ №2:

Я не совсем понимаю, что вы пытаетесь сделать со своим кодом… Но здесь это лучшее, что я мог придумать

 import sqlite3

def leap_year(year):
    if year%4==0:
        if(year%100==0):
            if(year%400==0):
                return True
            else:
                return False
        else:
            return True;

    else:
        return False

with sqlite3.connect("db.db") as conn:
    cur = conn.cursor()
    cur.execute("SELECT m.year FROM movie WHERE m.year = ?", (leap_year(m.year)))
    results = cur.fetchall()
    for result in results:
        print(result)
 

Комментарии:

1. Вы можете настроить значения, учитывая, что изначально это не имело смысла, я не собираюсь разбираться в этом сам, лол

Ответ №3:

Сначала выберите все годы и названия фильмов из вашей таблицы. То, как вы его настроили сейчас, фильтрует его до одного года, что не похоже на то, что вы хотите.

 results = pd.read_sql_query("select name, year from movies", con=conn)
 

Теперь просмотрите каждый год в результатах и запустите над ним функцию високосного года.

 import calendar

for index, row in results.iterrows():
    if calendar.isleap(row['year']):
        print(row['name'])