sql >> Database teknologi >  >> RDS >> PostgreSQL

Forenkle databasen (psycopg2) brug ved at oprette et modul

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:



  1. Tilslutning til Oracle-database med Node.js Windows

  2. Konverter Jalali-kalender til gregoriansk med PHP i CodeIgniter

  3. MySQL - skift ELLER til OG

  4. NHibernate 3.2 og Paging Oracle