Удаление строки по истечению времни
Мне нужно записывать мои IP адреса, имя и время на которое IP отправляется в бд в базу данных. Подскажите как реализовать функцию, для удаления из бд как только время которое я выбрал истечет. Сделано на Flask.
Вот код:
<form action="/block" method="POST">
<label for="ip_address">IP Address:</label>
<input type="text" id="ip_address" name="ip_address"><br>
<label for="block_period">Amount of Block:</label>
<select id="block_period" name="block_period">
<option value="1 hour">1 Hour</option>
<option value="24 hours">24 Hours</option>
<option value="3 days">3 Days</option>
<option value="1 week">1 Week</option>
<option value="1 month">1 Month</option>
</select><br>
<label for="user">User:</label>
<select id="user" name="user">
<option value="user3">user3</option>
<option value="user4">user4</option>
<option value="user5">user5</option>
</select><br>
<button id="submitButton">Block</button>
</form>
@app.route('/', methods=['GET', 'POST'])
def index():
return render_template('index.html')
@app.route('/block', methods=['POST'])
def block():
ip_address = request.form['ip_address']
block_period = request.form['block_period']
user = request.form['user']
add_to_database(ip_address, block_period, user)
return 'Data successfully added to database!'
def add_to_database(ip_address, block_period, user):
conn = sqlite3.connect('ip_blocker.db')
c = conn.cursor()
# Create table if it doesn't exist
c.execute('''CREATE TABLE IF NOT EXISTS blocked_ips
(ip_address text, block_period text, user text, block_time timestamp)''')
# Insert data into table
block_time = datetime.now()
c.execute("INSERT INTO blocked_ips VALUES (?, ?, ?, ?)", (ip_address, block_period, user, block_time))
conn.commit()
conn.close()
# Add IP address to the list of blocked IPs
blocked_ips.append(ip_address)
# Start a new thread to remove IP address from the list and database after block period
t = threading.Thread(target=remove_ip_address, args=(ip_address, block_time))
t.start()
вот сам метод remove ip address
для удаления, но почему-то не работает. Жду час. не удаляется.
def remove_ip_address(ip_address, block_time):
# Wait for the block period to end
block_period_seconds = int(block_period) * 60
time.sleep(block_period_seconds)
# Remove IP address from the list of blocked IPs
blocked_ips.remove(ip_address)
# Remove IP address from the database
conn = sqlite3.connect('ip_blocker.db')
c = conn.cursor()
c.execute("DELETE FROM blocked_ips WHERE ip_address=?", (ip_address,))
conn.commit()
conn.close()
# Save IP address to CSV file
with open('blocked_ips.csv', mode='a') as csv_file:
writer = csv.writer(csv_file)
writer.writerow([ip_address, block_period, user, block_time])
Буду рад помощи. Спасибо!
Источник: Stack Overflow на русском