Я пытаюсь использовать информацию из базы данных sqlite и обновить другие столбцы с некоторыми условиями, используя Python 3.6
python 3.6 и sqlite
def open_days(signed_date,completed_date):
fmt = '%Y-%m-%d'
if completed_date == '':
if signed_date:
sdate = datetime.strptime(signed_date, fmt)
tdate = datetime.now()
delta = str((tdate - sdate).days)
return delta
else:
sdate = datetime.strptime(signed_date, fmt)
cdate = datetime.strptime(completed_date, fmt)
delta = str((cdate - sdate).days)
return delta
conn = sqlite3.connect('mydb.db')
cur = conn.cursor()
cur.execute("SELECT * FROM data_table")
for row in cur:
cur.execute("UPDATE data_table SET days_open=? WHERE numid=?", (open_days(row[1],row[2]),row[0]))
cur.fetchall()
cur.close()
conn.commit()
Я ожидаю, что результат будет:
numid,signed_date,completed_date, number_of_days
1234,2019-05-15,,16
2345,2019-04-29,,32
3456,2019-04-29,2019-05-13,14
4567,,,None
значение не обновляется с правильным значением, если число дней установлено вручную
numid,signed_date,completed_date, number_of_days
1234,2019-05-15,,16
2345,2019-04-29,,16
3456,2019-04-29,2019-05-13,16
4567,,,16
Обратите внимание, что может быть, что ни подписанная дата, ни завершенная дата ужезарегистрироваться в БД в соответствии с примером, показывающим пробел между комой.
, если дата подписания и дата завершения зарегистрированы, то число дней - это разница между датой завершения и датой подписи
, если толькодата подписания регистрируется, тогда число дней - это разница между сегодняшней датой и датой подписи
, если даты без подписи, то число дней равно None