sql >> Databáze >  >> RDS >> PostgreSQL

Zjednodušte používání databáze (psychopg2) vytvořením modulu

Vaším hlavním problémem je, že každá proměnná je omezena na funkci, ve které jste ji napsali.
Pokud není uvedeno jinak:

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

Lepším přístupem by bylo převést to na třídu, základní příklad by byl:

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

Nyní SELECT dotaz toho moc neudělá, protože používáte cur.execute() .
Ale nechal jsem to záměrně, abych zachoval kód podobný tomu, co jste napsali, budete jej chtít vyměnit, aby vrátil hodnoty, ale pokud voláte dotaz, u kterého se očekává, že vrátí hodnotu a tak dále.

Váš přístup, který se zaměřuje na funkce, bude mít problémy se „jmenným prostorem“, kde proměnné žijí v místním rozsahu dané funkce a tam pro ostatní funkce k nim normálně nemají přístup.

Místo toho mohou proměnné s rozsahem třídy přistupovat ke svým vlastním proměnným a nejsou zde tak omezené.

Mohli byste vytvořit globální proměnné a deklarovat je jako globální ve funkcích, ale myslím, jak jsem zmínil v komentáři:



  1. Výjimka při načítání ovladače JDBC-ODBC

  2. Další/předchozí ID MySQL (libovolné pořadí řazení)

  3. Na místě se nezobrazuje znak eura

  4. Složitý problém „Mezery a ostrovy“.