install psycopg2 https://pypi.org/project/psycopg2/
Psycopg is the most popular PostgreSQL database adapter for the Python programming language.
(venv) PS C:\flaskmyproject> pip install psycopg2
Crate database table
CREATE TABLE students (
id serial PRIMARY KEY,
fname VARCHAR ( 40 ) NOT NULL,
lname VARCHAR ( 40 ) NOT NULL,
email VARCHAR ( 40 ) NOT NULL
profile_pic VARCHAR ( 150 ) NULL
);
SELECT * FROM students
Multiple insert
INSERT INTO
students(id,fname,lname,email)
VALUES
('Quinn','Flynn'', 'Flynn'@gmail.com'),
('Tiger','nizon', 'nizon@gmail.com'),
('Airi','sato', 'sato@gmail.com');
#app.py from flask import Flask, render_template, flash, redirect, url_for, request import psycopg2 #pip install psycopg2 import psycopg2.extras app = Flask(__name__) app.secret_key = "cairocoders-ednalan" DB_HOST = "localhost" DB_NAME = "sampledb" DB_USER = "postgres" DB_PASS = "admin" conn = psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST) @app.route('/') def home(): cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) cursor.execute("SELECT * FROM students") rows = cursor.fetchall() return render_template('index.html', students=rows) @app.route('/delete', methods=['GET', 'POST']) def index(): cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) if request.method == 'POST': #test = request.form.getlist('mycheckbox') for getid in request.form.getlist('mycheckbox'): print(getid) cur.execute('DELETE FROM students WHERE id = {0}'.format(getid)) conn.commit() flash('Student Removed Successfully') return redirect('/') if __name__ == '__main__': app.run(debug=True)templates/index.html
//templates/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Python Flask PostgreSQL Delete Multiple records using checkbox with getlist</title> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script> <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <p><h2>Python Flask PostgreSQL Delete Multiple records using checkbox with getlist</h2></p> <div class="table-responsive"> <form method="POST" action="/delete"> <table id="mytable" class="table table-bordred table-striped"> <thead> <th><input type="checkbox" id="checkall" /></th> <th>First Name</th> <th>Last Name</th> <th>Email</th> <th width="50">Edit</th> <th width="50">Delete</th> </thead> <tbody> {% for rs in students %} <tr> <td><input type="checkbox" value="{{ rs.id }}" name="mycheckbox" class="checkthis" /></td> <td>{{ rs.fname }}</td> <td>{{ rs.lname }}</td> <td>{{ rs.email }}</td> <td><p data-placement="top" data-toggle="tooltip" title="Edit"><button class="btn btn-primary btn-xs" data-title="Edit" data-toggle="modal" data-target="#edit" ><span class="glyphicon glyphicon-pencil"></span></button></p></td> <td><p data-placement="top" data-toggle="tooltip" title="Delete"><button class="btn btn-danger btn-xs" data-title="Delete" data-toggle="modal" data-target="#delete" ><span class="glyphicon glyphicon-trash"></span></button></p></td> </tr> {% endfor %} </tbody> </table><input type="submit" value="Delete All Selected" class="btn btn-primary"> <br/> <div> {% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %} <div class="alert alert-danger" role="alert">{{ message }}</div> {% endfor %} {% endif %} {% endwith %} </div> </form> </div> </div> </div> </div> <script> $(document).ready(function(){ $("#mytable #checkall").click(function () { if ($("#mytable #checkall").is(':checked')) { $("#mytable input[type=checkbox]").each(function () { $(this).prop("checked", true); }); } else { $("#mytable input[type=checkbox]").each(function () { $(this).prop("checked", false); }); } }); $("[data-toggle=tooltip]").tooltip(); }); </script> </body> </html>