sql >> Base de Datos >  >> RDS >> PostgreSQL

Simplifique el uso de la base de datos (psycopg2) creando un módulo

Su principal problema es que cada variable está limitada a la función en la que la escribió.
A menos que se declare lo contrario:

def db_init():
    global conn
    conn = psycopg2....

Un mejor enfoque sería convertir esto en una clase, un ejemplo básico sería:

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()

Ahora, el SELECT la consulta no hará mucho ya que está usando cur.execute() .
Pero mantuve esto a propósito para mantener el código similar al que escribiste, querrás cambiarlo para devolver los valores, sin embargo, si llamas a una consulta que se espera que devuelva un valor y así sucesivamente.

Su enfoque que se centra en las funciones tendrá problemas de "espacio de nombres" donde las variables viven en un ámbito local de esa función y otras funciones normalmente no pueden acceder a ellas.

En cambio, las variables de ámbito de clase pueden acceder a sus propias variables y no están tan limitadas de fábrica.

Podría hacer variables globales y declararlas como globales en las funciones, pero creo que como mencioné en un comentario: