Я создал несколько вспомогательных функций для основных действий Postgres, таких как создание соединения, создание курсора, создание таблицы, создание столбцов и так далее. Я сохранил функции в отдельном файле .py и добавил к пути. Я могу импортировать файл и видеть их при вызове dir()
, но когда я пытаюсь вызвать функцию, которая зависит от объекта psycopg2.cursor()
, он возвращает ошибку имени.
Я пытался превратить его в класс для доступа к объектам таким образом, но безуспешно.
Я также попытался вызвать функцию cur в файле my_psycop.py.
#This is from the helper function file
import psycopg2
def connect_and_make_cursor(host, dbname, user, pw):
try:
conn = psycopg2.connect(f"host={host}, dbname={dbname} user = {user} password = {pw}")
conn.set_session(autocommit = True)
cur = conn.cursor()
except psycopg2.Error as e:
print(e)
return cur
#this is from the file in which I am attempted to import the functions
import my_psycop
from password import password
#psycopg2 = my_psycop.psycopg2
dir(my_psycop)
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'close_connection',
'connect_and_make_cursor',
'create_database',
'create_table',
'insert_columns',
'insert_rows',
'psycopg2']
cur = my_psycop.connect_and_make_cursor("127.0.0.1", 'postgres', 'postgres', password )
my_psycop.create_database('new_db')
Ниже приведена ошибка трассировки:
NameError Traceback (most recent call last)
<ipython-input-11-5eb39fff83a2> in <module>()
----> 1 my_psycop.create_database('new_db')
c:\python36\lib\site-packages\my_psycop.py in create_database(db_name)
12 def create_database(db_name):
13 try:
---> 14 cur.execute(f"CREATE DATABASE {db_name}")
15 except psycopg2.Error as e:
16 print(e)
NameError: name 'cur' is not defined
Я никогда не использовал пользовательские функции таким образом, чтобы полагаться на отдельную библиотеку и понимаю, что это какая-то проблема с областями видимости, но я просто не могу понять это. Было бы замечательно, чтобы в будущем я не использовал эти функции в каждом отдельном файле, который я создаю. Заранее спасибо!