PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Опростете използването на база данни (psycopg2) чрез създаване на модул

Вашият основен проблем е, че всяка променлива е ограничена до функцията, в която сте я написали.
Освен ако не е декларирано друго като такова:

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

По-добър подход би бил да преобразувате това в клас, основен пример би бил:

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

Сега SELECT заявката няма да направи много, тъй като използвате cur.execute() .
Но запазих това нарочно, за да запазя кода подобен на написаното от вас, ще искате да го размените, за да върне стойностите, но ако извиквате заявка, която се очаква да върне стойност и т.н.

Вашият подход, който е фокусиран върху функциите, ще има проблеми с пространството на имената, където променливите живеят в локален обхват на тази функция и други функции обикновено нямат достъп до тях.

Вместо това променливите с обхват на класа могат да имат достъп до собствените си променливи и не са ограничени от кутията.

Можете да направите глобални променливи и да ги декларирате като глобални във функциите, но мисля, че както споменах в коментар:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отстраняване на грешки в програма, която използва SIGINT с gdb

  2. Защо setval() се проваля с връзка ... не съществува?

  3. Грешка при запис на Dataframe от R към Redshift

  4. Как да върна резултата от временната таблица във функцията postgresql

  5. Хибернация „Инверсия“ във файла за картографиране