Позвольте мне предисловие к этому, сказав, что я довольно новичок в Python, и прошу прощения, если это не подходящее место для этого вопроса.Упростить использование базы данных (psycopg2), создав модуль
Я использую модуль psycopg2 для управления базой данных PostgreSQL. Общее использование будет выглядеть примерно так:
# Example 1
import psycopg2
conn = psycopg2.connect(database="mydb", user="postgres")
cur = conn.cursor()
cur.execute ("SELECT * FROM mytable;")
rows = cur.fetchall()
for i, row in enumerate(rows):
print "Row", i, "value = ", row
cur.close()
conn.close()
Это откроет соединение с MYDB базы данных , выберите все поля из таблицы туЬаЫх и распечатать их, а затем закрыть соединение.
Что бы я хотел сделать, это разделить некоторые из этих функций на модуль, потому что мне нужно будет их повторять много раз в течение многих сценариев. Для этого примера, в идеале я бы иметь модуль с именем ядра, который содержит три функции:
- core.db_init() - которая открывает соединение и состоит из первых двух строк коды выше.
- core.db_query (query) - который выполняет требуемый SQL-запрос и состоит из третьей строки в указанном выше коде.
- core.db_close() - который закрывает соединение и состоит из двух последних строк.
Я попытался создать модуль следующим образом:
# Module core.py
import psycopg2
def db_init():
conn = psycopg2.connect(database="mydb", user="postgres")
cur = conn.cursor()
def db_query(query):
cur.execute(query)
def db_close():
cur.close()
conn.close()
Но я получаю ошибки пространства имен, когда я пытаюсь воссоздать пример 1 с помощью этого модуля:
# Example 2
import core
core.db_init()
core.db_query("SELECT * FROM mytable;")
rows = cur.fetchall()
for i, row in enumerate(rows):
print "Row", i, "value = ", row
core.db_close()
Я даже не уверенный, что модуль - это то, что я хочу. Должен ли я использовать класс вместо этого? Опять же, я очень новичок в этом. Но если кто-то может помочь мне найти лучший способ сделать это, я буду очень благодарен.
Хорошо написанный вопрос btw, есть все, что вы пробовали, какое ваше желаемое поведение было бы и примерно фактическая ошибка. Также приветствуем StackOverflow и особенно приветствуем Python:) Если какой-либо из приведенных ниже ответов решает вашу проблему, не забудьте пометить вопрос как «Ответ», чтобы он не попал в кучу оставшихся без ответа вопросов. – Torxed