sql >> Database >  >> RDS >> PostgreSQL

Vereenvoudig het gebruik van de database (psycopg2) door een module te maken

Je belangrijkste probleem is dat elke variabele beperkt is tot de functie waarin je hem hebt geschreven.
Tenzij anders als zodanig wordt aangegeven:

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

Een betere benadering zou zijn om dit om te zetten in een klas, een eenvoudig voorbeeld zou zijn:

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, de SELECT query zal niet veel doen omdat je cur.execute() gebruikt .
Maar ik heb dit expres bewaard om de code vergelijkbaar te houden met wat je schreef, je zult die willen verwisselen om de waarden te retourneren, maar als je een query aanroept waarvan wordt verwacht dat deze een waarde retourneert, enzovoort.
/P>

Uw benadering die is gericht op functies zal "naamruimte"-problemen hebben waarbij variabelen in een lokaal bereik van die functie leven en daar voor andere functies normaal geen toegang tot hebben.

In plaats daarvan hebben klassebereikvariabelen toegang tot hun eigen variabelen en zijn daar niet zo beperkt uit de doos.

Je zou globale variabelen kunnen maken en ze als globaal kunnen declareren in de functies, maar ik denk zoals ik al zei in een opmerking:



  1. Tijdelijke tabellen werken niet in PHPMyAdmin

  2. Recursieve opmerkingen implementeren in PHP/MySQL

  3. Als een tabel bestaat, laat de tabel dan vallen, als deze niet bestaat, maak hem dan gewoon aan

  4. MySQL ORDER BY Datumveld dat geen datumnotatie heeft