ich habe gerade angefangen ein Backend mit FastAPI und PostgreSQL zu programmieren. Ich habe dafür schon eine PostgreSQL Datenbank angelegt und unter anderem die Tabelle 'users' angelegt.
Außer den Datentypen stimmen die Spalten dieser Tabelle genau mit den Attributen der Klasse 'User' überein. (Nicht wundern, dass ich die Klasse nicht benutze, diese soll für zukünftige INSERT befehle die Datentypvalidierung übernehmen).
Okay soviel zum Hintergrund. Nun meine eigentlichen Fragen:
A) Soll ich mich wie in "get_all_users" immer wieder mit meiner Datenbank mit 'psycopg2.connect(**config)' verbinden oder reicht es dies einmal ganz am Anfang des Programms zu machen? Denn ansonsten müsste ja mein Programm sich bei jeder API-Anfrage erneut mit der Datenbank verbinden... Ich habe keine Ahnung ob das so vorgesehen ist.. Vielen Dank schonmal für eure Ratschläge
B) Um das Python-Modul 'psycopg2' verwenden zu können habe ich mich vor allem auf Code von dieser Webseite gestützt:
https://www.postgresqltutorial.com/postgresql-python/
Sind die Beispiele von dieser Webseite gut oder sollte ich doch lieber auf die offizielle Dokumentation von psycopg hören?
(https://www.psycopg.org/docs/)
Hier mein Code:
database.ini
Code: Alles auswählen
[postgresql]
host=localhost
database=jubeltachDB
user=postgres
password=geheim
main.py:
Code: Alles auswählen
from configparser import ConfigParser
from fastapi import FastAPI
from fastapi.param_functions import Depends
from pydantic import BaseModel
import psycopg2
class User(BaseModel):
user_id: int
name: str
password: str
accept_invitation: bool
vote_qty: int
app = FastAPI()
def config(filename='database.ini', section='postgresql'):
parser = ConfigParser()
parser.read(filename)
db = {}
if parser.has_section(section):
params = parser.items(section)
for param in params:
db[param[0]] = param[1]
else:
raise Exception(f'Section {section} not found in the {filename} file')
return db
@app.get("/users/")
async def get_all_users(config: dict = Depends(config)):
conn = psycopg2.connect(**config)
cur = conn.cursor()
cur.execute('SELECT * FROM users ORDER BY user_id;')
users = cur.fetchall()
cur.close()
conn.close()
return users