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
CREATE TABLE upload (
id serial PRIMARY KEY,
title VARCHAR ( 100 ) NOT NULL,
);
#app.py from flask import Flask, flash, request, redirect, url_for, render_template import urllib.request import os from werkzeug.utils import secure_filename 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) UPLOAD_FOLDER = 'static/uploads/' app.secret_key = "secret key" app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif']) def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/') def home(): return render_template('index.html') @app.route('/', methods=['POST']) def upload_image(): cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('No image selected for uploading') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) #print('upload_image filename: ' + filename) cursor.execute("INSERT INTO upload (title) VALUES (%s)", (filename,)) conn.commit() flash('Image successfully uploaded and displayed below') return render_template('index.html', filename=filename) else: flash('Allowed image types are - png, jpg, jpeg, gif') return redirect(request.url) @app.route('/display/<filename>') def display_image(filename): #print('display_image filename: ' + filename) return redirect(url_for('static', filename='uploads/' + filename), code=301) if __name__ == "__main__": app.run()templates/index.html
//templates/index.html <html> <head> <title>Upload and display image using Python Flask and insert to PostgreSQL</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> </head> <body> <p><h1 align="center">Upload and display image using Python Flask and insert to PostgreSQL</h1></p> <div class="container"> <div class="row"> <h2>Select a file to upload</h2> <p> {% with messages = get_flashed_messages() %} {% if messages %} <ul> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} </p> {% if filename %} <div> <img src="{{ url_for('display_image', filename=filename) }}"> </div> {% endif %} <form method="post" action="/" enctype="multipart/form-data"> <dl> <p> <input type="file" name="file" class="form-control" autocomplete="off" required> </p> </dl> <p> <input type="submit" value="Submit" class="btn btn-info"> </p> </form> </div> </div> </body> </html>