обновить столбцы sqlite на основе информации о других столбцах - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь использовать информацию из базы данных 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

1 Ответ

0 голосов
/ 02 июня 2019

Я нашел способ обновить строки:

conn = sqlite3.connect('mydb.db')
conn.create_function('open_days', 2 , open_days)
cur = conn.cursor()

for row in cur.execute('SELECT signed_date, completed_date, open_days(signed_date,completed_date) FROM data_table'):
    cur.execute('UPDATE data_table SET days_open=(open_days(signed_date,completed_date))')
cur.close()
conn.commit()

изменить в соответствии с вводом Сэма:

conn = sqlite3.connect('mydb.db')
conn.create_function('open_days', 2 , open_days)
cur = conn.cursor()
cur.execute('UPDATE data_table SET days_open=(open_days(signed_date,completed_date))')
cur.close()
conn.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...