Я рефакторил свой код psycopg2 с использованием функций, раньше все это было в блоке try-кроме-finally, однако я не совсем уверен, как реализовать контекстный менеджер для обработки соединения и курсора. Мои SQL-запросы работают и выглядят следующим образом:
@contextmanager
def sql_connection():
connection = psycopg2.connect(**DB_CONNECTION)
cursor = connection.cursor()
try:
yield connection,cursor
except Exception as err:
connection.rollback()
print('Error : ', err)
raise
finally:
if (connection):
cursor.close()
connection.close()
print("Connection is closed")
with sql_connection() as (conn, cursor):
random_record = random_query('test_schema', 'test_table', 'username', 1)
insert_query('test_schema', 'test_table2', random_record)
Мои вопросы:
Есть ли разница между первой и второй версией? Какой из них предпочтительнее?
Как вы можете видеть в Insert_query, есть строка, которая вызывает conn.commit() Из документации я понимаю, что это не требуется, если мы используем менеджер контекста. Могу ли я их удалить?
Изменено в версии 2.5: если соединение используется в операторе with,
метод вызывается автоматически, если в блоке
with не возникает исключение.
Я рефакторил свой код psycopg2 с использованием функций, раньше все это было в блоке try-кроме-finally, однако я не совсем уверен, как реализовать контекстный менеджер для обработки соединения и курсора. Мои SQL-запросы работают и выглядят следующим образом: [code]def random_query(schema, table, username, number_of_files): random_query = sql.SQL("SELECT * FROM {schema}.{table} WHERE username = {username} ORDER BY RANDOM() LIMIT {limit}").format( schema=sql.Identifier(schema), table=sql.Identifier(table), username=sql.Literal(username), limit=sql.Literal(number_of_files) ) cursor.execute(random_query) return cursor.fetchone()
with get_connection() as conn, get_cursor(conn) as cursor: random_record = random_query('test_schema', 'test_table', 'username', 1) insert_query('test_schema', 'test_table2', random_record) [/code] [list] [*]Вторая версия: [/list] [code]@contextmanager def sql_connection(): connection = psycopg2.connect(**DB_CONNECTION) cursor = connection.cursor() try: yield connection,cursor except Exception as err: connection.rollback() print('Error : ', err) raise finally: if (connection): cursor.close() connection.close() print("Connection is closed")
with sql_connection() as (conn, cursor): random_record = random_query('test_schema', 'test_table', 'username', 1) insert_query('test_schema', 'test_table2', random_record)
[/code] Мои вопросы: [list] [*]Есть ли разница между первой и второй версией? Какой из них предпочтительнее? [*]Как вы можете видеть в Insert_query, есть строка, которая вызывает conn.commit() Из документации я понимаю, что это не требуется, если мы используем менеджер контекста. Могу ли я их удалить? [/list]
Изменено в версии 2.5: если соединение используется в операторе with, метод вызывается автоматически, если в блоке with не возникает исключение.
The title may not reflect the essence of the question. I am writing a small script. I use Pyrogram to troll messages from the Telegram channel. Next, I extract the necessary data, which I use Playwright to enter into a form on some site.
Обычно я использую MacOS, но для работы я только начал использовать Windows. Пытался установить psycopg2, но не получилось. Также пытался установить psycopg2-binary, но это тоже не удалось.
Когда я набираю pip install psycopg2-binary, появляется...
Скриншот проблемы
Когда мы пытаемся получить доступ к медиа-менеджеру на нашем сайте Joomla (joomla 4.4.5), мы получаем пустой проводник и получаем эту ошибку в консоли.
Access to XMLHttpRequest at ' from origin ' has been blocked by CORS policy:...