Dit hovedproblem er, at hver variabel er begrænset til den funktion, du skrev den i.
Medmindre andet erklæres som sådan:
def db_init():
global conn
conn = psycopg2....
En bedre tilgang ville være at konvertere dette til en klasse, et grundlæggende eksempel ville være:
import psycopg2
class MyDatabase():
def __init__(self, db="mydb", user="postgres"):
self.conn = psycopg2.connect(database=db, user=user)
self.cur = self.conn.cursor()
def query(self, query):
self.cur.execute(query)
def close(self):
self.cur.close()
self.conn.close()
db = MyDatabase()
db.query("SELECT * FROM table;")
db.close()
Nu, SELECT
forespørgsel vil ikke gøre meget, da du bruger cur.execute()
.
Men jeg beholdt dette med vilje for at beholde koden svarende til det, du skrev, du vil gerne bytte den ud for at returnere værdierne, men hvis du kalder en forespørgsel, der forventes at returnere en værdi og så videre.
Din tilgang, der er fokuseret på funktioner, vil have "navneområde"-problemer, hvor variabler lever i et lokalt omfang af denne funktion, og der for andre funktioner normalt ikke kan få adgang til dem.
I stedet kan klasseomfangsvariabler få adgang til sine egne variabler og er der for ikke så begrænsede ud af boksen.
Du kan lave globale variabler og erklære dem som globale i funktionerne, men jeg tror, som jeg nævnte i en kommentar: