Ihr Hauptproblem ist, dass jede Variable auf die Funktion beschränkt ist, in der Sie sie geschrieben haben.
Sofern nicht anders angegeben:
def db_init():
global conn
conn = psycopg2....
Ein besserer Ansatz wäre, dies in eine Klasse umzuwandeln, ein einfaches Beispiel wä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()
Jetzt das SELECT
Die Abfrage wird nicht viel bewirken, da Sie cur.execute()
verwenden .
Aber ich habe dies absichtlich beibehalten, um den Code dem ähnlich zu halten, den Sie geschrieben haben. Sie sollten das austauschen, um die Werte zurückzugeben, wenn Sie jedoch eine Abfrage aufrufen, von der erwartet wird, dass sie einen Wert zurückgibt, und so weiter.
Ihr Ansatz, der sich auf Funktionen konzentriert, wird "Namespace"-Probleme haben, bei denen Variablen in einem lokalen Bereich dieser Funktion leben und andere Funktionen normalerweise nicht darauf zugreifen können.
Stattdessen können Klassenbereichsvariablen auf ihre eigenen Variablen zugreifen und sind daher nicht so eingeschränkt, dass sie sofort einsatzbereit sind.
Sie könnten globale Variablen erstellen und sie in den Funktionen als global deklarieren, aber ich denke, wie ich in einem Kommentar erwähnt habe: