Запрос объектов Datetime в Python и сравнение с текущей датой - PullRequest
0 голосов
/ 30 октября 2018

У меня есть этот фрагмент кода, который я хочу напечатать, когда текущая дата больше, чем дата в таблице SQLite3.

import sqlite3
from datetime import *

conn = sqlite3.connect(":memory:")
c = conn.cursor()

c.execute("CREATE TABLE mutes (name text, seconds int)")
conn.commit()

c.execute("INSERT INTO mutes VALUES (:name, :seconds)", {"name": "William", "seconds": 60})
conn.commit()

while True:
    c.execute("SELECT * FROM mutes WHERE name=:name", {"name":"William"})
    now = datetime.now()
    togo = datetime.now() + timedelta(seconds=int(c.fetchone()[1]))
    if now >= togo:
        print("Release!!!")
        break

Я знаю, что это работает, так как когда я обращаю условие в операторе if, оно также печатается. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 30 октября 2018

Если вы не вычли время или не добавили время, datetime.now() никогда не будет больше или равно datetime.now() + x

В этом случае вы добавляете 60 секунд к datetime.now() и затем спрашиваете, больше ли datetime.now() или равно datetime.now() + 60 seconds. Это невозможно.

Если ваше намерение состоит в том, чтобы печатать, когда текущая дата больше, чем дата вашего теста, вам нужно иметь дату теста минус 60 секунд.

import sqlite3
from datetime import *

conn = sqlite3.connect(":memory:")
c = conn.cursor()

c.execute("CREATE TABLE mutes (name text, seconds int)")
conn.commit()

c.execute("INSERT INTO mutes VALUES (:name, :seconds)", {"name": "William", "seconds": 60})
conn.commit()

while True:
    c.execute("SELECT * FROM mutes WHERE name=:name", {"name":"William"})
    now = datetime.now()
    togo = datetime.now() - timedelta(seconds=int(c.fetchone()[1]))
    if now >= togo:
        print("Release!!!")
        break

Если вы хотите, чтобы while True работал в течение 60 секунд, прежде чем вы получите break и print, тогда вы можете изменить это на: импорт sqlite3 с даты и времени импорта *

conn = sqlite3.connect(":memory:")
c = conn.cursor()

c.execute("CREATE TABLE mutes (name text, seconds int)")
conn.commit()

c.execute("INSERT INTO mutes VALUES (:name, :seconds)", {"name": "William", "seconds": 60})
conn.commit()

c.execute("SELECT * FROM mutes WHERE name=:name", {"name":"William"})
togo = datetime.now() - timedelta(seconds=int(c.fetchone()[1]))

while True:
    now = datetime.now()
    if now >= togo:
        print("Release!!!")
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...