Я пишу Pytest, где я создаю временные таблицы в памяти в db, используя прибор и определяя область видимости прибора.
@fixture(scope='session')
def tmp_dim_sponsor(get_redshift_connection):
sql = """DROP TABLE IF EXISTS mock_tmp_dim_sponsor;
CREATE TEMP TABLE mock_tmp_dim_sponsor (LIKE
tmp.tmp_dim_sponsor);"""
execute_sql_no_return(sql, get_redshift_connection, False)
print("mock_tmp_dim_sponsor Created")
Затем у меня есть другой прибор, который вызывает скрипт bash с использованием подпроцесса.Эти bash-скрипты должны ссылаться на эти временные таблицы, которые были созданы ранее с помощью прибора.Сценарии bash устанавливают новое соединение с БД, а затем выполняют sql, который имеет ссылку на временные таблицы, созданные ранее.
@fixture(scope='session')
def dim_sponsor_transformation_1(get_redshift_connection):
copy2('/dim_sponsor_transformation_test.sh',
'/tmp_dim_sponsor_transformation.sh')
with open("tmp_dim_sponsor_transformation.sh", "r+") as file1:
with open("mock_dim_sponsor_transformation.sh", "w") as file2:
for line in file1:
new = re.sub(r'\$\{\w*SCHEMA\}\.', "mock_", line)
new1 = re.sub(r'check_status \$\?.*', "", new)
new2 = re.sub(r'>> \$LOGDIR.*', "", new1)
new3 = re.sub(r'log .*"', "", new2)
new4 = re.sub(r'SCRIPTDIR="\$HOME/scripts"',
'SCRIPTDIR="/Users/abc/src/main/scripts"', new3)
file2.write(new4)
file.close(file1)
file.close(file2)
print(file2)
os.chmod('mock_dim_sponsor_transformation.sh', 0o777)
print("Changed the permission")
print("Starting to Run the Transformation")
t =
subprocess.check_output(["./mock_dim_sponsor_transformation.sh",
"qa"])
print(t)
print("Completed Transformation")
Сценарий bash (mock_dim_sponsor_transformation.sh) устанавливает новое соединение с БД, а затем выполняетSQL.
SCRIPTDIR="/User/xxx/xxx/src/main/scripts"
source $SCRIPTDIR/utils/get_environment.sh $1
export PGPASSWORD=$RSDBPASSWORD
PAST_DAY=$(date -d "yesterday" +"%Y-%m-%d")
PAST_DAY_VALUE="'"${PAST_DAY}"'"
psql -h $RSDBHOST -p $RSDBHOSTPORT -U $RSDBOWNER -d $RSDBNAME -c \
"
TRUNCATE mock_tmp_dim_sponsor;
"
psql -h $RSDBHOST -p $RSDBHOSTPORT -U $RSDBOWNER -d $RSDBNAME -c \
"
INSERT INTO mock_tmp_dim_sponsor
(
sponsor_legacy_id,
sponsor_id,
name,
plan_type,
default_segment_id,
created_date,
updated_date,
is_genesis,
sponsor_display_name,
...
Однако он не может найти те временные таблицы, которые, я думаю, имеет смысл b / c 1. Поскольку сценарий bash устанавливает новое соединение с БД, он не будет находить временные таблицы, поскольку временные таблицыв памяти об этой сессии.2. Создает ли подпроцесс новый сеанс при вызове другого сценария?
Какие-либо предложения о том, как я могу ссылаться на временные таблицы, созданные в fixture в сценарии bash?Кроме того, есть ли способ, которым я могу передать объект соединения db при вызове подпроцесса, чтобы mock_dim_sponsor_transformation.sh не устанавливал новое соединение?
Я довольно новичок в Pytest и все еще учусь.Любые предложения или рекомендации будут высоко оценены.Спасибо!