#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'])