sql >> Databasteknik >  >> RDS >> PostgreSQL

Förenkla databasanvändning (psycopg2) genom att skapa en modul

Ditt huvudproblem är att varje variabel är begränsad till funktionen du skrev den i.
Om inget annat anges som sådant:

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

Ett bättre tillvägagångssätt skulle vara att konvertera detta till en klass, ett grundläggande exempel skulle vara:

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 fråga kommer inte att göra mycket eftersom du använder cur.execute() .
Men jag behöll detta med avsikt för att behålla koden som liknar den du skrev, du vill byta ut den för att returnera värdena men om du ringer en fråga som förväntas returnera ett värde och så vidare.

Ditt tillvägagångssätt som är fokuserat på funktioner kommer att ha "namnutrymme"-problem där variabler finns i en lokal omfattning av den funktionen och där för andra funktioner normalt inte kan komma åt dem.

Istället kan klassomfångade variabler komma åt sina egna variabler och är inte så begränsade direkt.

Du kan göra globala variabler och deklarera dem som globala i funktionerna, men jag tror som jag nämnde i en kommentar:



  1. SSRS:upprepa tablix värdet längst till vänster på radgruppen på varje rad

  2. Skapa ett flerstegs SQL Server Agent Job (T-SQL)

  3. MySQL - Persistent anslutning vs anslutningspooling

  4. Kan jag ändra ft_min_word_len på delad hosting?