[PYTHON] Création d'un livre de lecture lié à PostgreSQL avec Flask

introduction

Après avoir étudié les samedis et dimanches, j'ai fait un petit livre de lecture. Cliquez ici pour l'écran. 画面.png

Tout ce que vous avez à faire est d'enregistrer les livres que vous avez lus et de consulter la liste des livres enregistrés.

Code source

Le code source est le suivant. Je vais omettre le code HTML car il est tel que vous le voyez.

app.py


from flask import Flask, render_template,url_for,request,redirect
from sqlalchemy import create_engine
import pandas
import psycopg2

'''
Site référencé
https://tanuhack.com/pandas-postgres-readto/

'''

#Informations de connexion PostgreSQL
connection_config = {
    'user': 'user',
    'password': 'password',
    'host': 'localhost',
    'port': '5432',
    'database': 'mydb'
}

#Connexion à la base de données avec psycopg2
connection = psycopg2.connect(**connection_config)

#Création de df
df = pandas.read_sql(sql='SELECT * FROM books;', con=connection) 
header = ['id','Titre de livre','Auteur','Date de lecture','Évaluation']
record = df.values.tolist() #Une liste de tableaux à deux dimensions de tous les enregistrements, sans inclure l'index DataFrame

app = Flask(__name__)

@app.route('/')
def index():
    #Instruction SELECT mise à jour à partir de la base de données à chaque lecture de l'index
    df = pandas.read_sql(sql='SELECT * FROM books;', con=connection) 
    record = df.values.tolist()
    return render_template('index.html',  header=header, record=record)

@app.route('/result', methods=['GET','POST'])
def addition():
    if request.method == "POST":
        #Besoin de réacquérir le nombre d'enregistrements
        df = pandas.read_sql(sql='SELECT * FROM books;', con=connection) 
        record = df.values.tolist() 

        #Obtenez la valeur de l'instruction INSERT en fonction du contenu de POST, id est le nombre actuel d'enregistrements+1
        book_id = len(record)+1
        res1 = request.form['Titre de livre']
        res2 = request.form['Auteur']
        res3 = request.form['Date de lecture']
        res4 = request.form['Évaluation']
        dict1={'id':[book_id],'name':[res1],'writer':[res2],'read_day':[res3],'rank':[res4]}

        #SQL Alchemy requis pour voler vers DB
        engine = create_engine('postgresql://{user}:{password}@{host}:{port}/{database}'.format(**connection_config))
        df = pandas.DataFrame(data=dict1)
        df.to_sql('books', con=engine, if_exists='append', index=False)
        return redirect(url_for('index'))

##la magie
if __name__ == "__main__":
    app.run(debug=True)

En résumé, il y a une table des livres lus dans PostgreSQL, le contenu acquis en tant que DataFrame par l'instruction SELECT est répertorié, et envoyé à index.html avec render_template pour être affiché comme "livres que vous lisez". Ensuite, l'enregistrement du livre que vous avez lu est traité comme une méthode POST en entrant les informations dans le formulaire de saisie et en appuyant sur le bouton d'enregistrement. L'identifiant reçoit automatiquement le dernier numéro, les autres sont obtenus à partir du formulaire d'entrée et une ligne de données de type dictionnaire est créée. Enfin, convertissez les données de type dictionnaire en DataFrame et ignorez l'instruction INSERT dans la base de données avec df.to_sql pour ajouter les données.

Tâche

・ Impossible de déployer J'ai essayé d'utiliser heroku, mais celui déployé n'a pas bien commencé et j'ai abandonné. La cause n'est pas claire, mais je pense que j'aurais dû utiliser virtualenv car il semblait être affecté par ce que j'ai fait dans l'environnement brut.

・ Fonction insuffisante Comme vous pouvez le voir, il n'a que la possibilité d'ajouter des données. Si vous souhaitez modifier ou supprimer les informations d'enregistrement, vous devez accéder directement à la base de données à l'invite de commande.

Pour le futur

Pour le moment, j'ai pu relier la DB et la page web (acquisition de la DB et ajout à la DB) que je voulais faire au minimum, donc je vais lui donner un point. Ensuite, je n'ai pas décidé de refaire le livre de lecture ou d'en créer un autre, mais j'aimerais le faire avec un style de création utilisant virtualenv et le déployer progressivement sur heroku.

Recommended Posts

Création d'un livre de lecture lié à PostgreSQL avec Flask
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Je veux faire la transition avec un bouton sur le ballon
"Un livre qui comprend Flask à partir de zéro" Lecture d'un mémo
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
Flask-Créer une liste Todo avec des mesures CSRF avec WTF avec Flask
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Un dentiste (!?) A créé une application de jugement de quantité de mousse de langue avec flacon + keras
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Créer un lecteur CSV avec Flask
Créer un serveur Flask avec Docker
[Édition DSU] Lecture de la bibliothèque AtCoder avec un codeur vert ~ Implémentation en Python ~
Je suis resté coincé dans la redirection d'une application flask avec un proxy inverse entre les deux
Créer un enregistrement avec des pièces jointes dans KINTONE à l'aide du module de requêtes Python
Dessinez un cœur en rubis avec PyCall
Créez un simulateur de gacha rare avec Flask
Créé un voyage de fléchettes avec python (news)
Créez une application Web simple avec Flask
Lancer une application Flask dans Python Anywhere
Remarques sur l'activation de PostgreSQL avec Django
Créer un service Web avec Docker + Flask
J'ai créé un outil de mot de passe en Python.
Flask-Créer un service Web avec SQLAlchemy + PostgreSQL
[Python] A créé une classe pour jouer des vagues de péché en arrière-plan avec pyaudio