Je belangrijkste probleem is dat elke variabele beperkt is tot de functie waarin je hem hebt geschreven.
Tenzij anders als zodanig wordt aangegeven:
def db_init():
global conn
conn = psycopg2....
Een betere benadering zou zijn om dit om te zetten in een klas, een eenvoudig voorbeeld zou zijn:
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, de SELECT
query zal niet veel doen omdat je cur.execute()
gebruikt .
Maar ik heb dit expres bewaard om de code vergelijkbaar te houden met wat je schreef, je zult die willen verwisselen om de waarden te retourneren, maar als je een query aanroept waarvan wordt verwacht dat deze een waarde retourneert, enzovoort.
/P>
Uw benadering die is gericht op functies zal "naamruimte"-problemen hebben waarbij variabelen in een lokaal bereik van die functie leven en daar voor andere functies normaal geen toegang tot hebben.
In plaats daarvan hebben klassebereikvariabelen toegang tot hun eigen variabelen en zijn daar niet zo beperkt uit de doos.
Je zou globale variabelen kunnen maken en ze als globaal kunnen declareren in de functies, maar ik denk zoals ik al zei in een opmerking: