У меня есть словарь для создания операторов вставки для теста, который я делаю.Значение вставки для поля описания должно иметь идентификатор текущей строки, КОТОРОГО У меня НЕ ИМЕЕТСЯ, пока я не запустил программу.Кроме того, этот идентификатор увеличивается на 1 каждый раз, когда я вставляю, и описание для каждой вставки должно иметь соответствующий ему row_num.
Я хочу заранее загрузить словарь всех полей в таблице, чтобы я могиспользуйте информацию в нем, чтобы создать операторы вставки и изменения для моего теста.Я не хочу жестко кодировать test_value поля в коде;Я хочу, чтобы то, что должно быть в нем, было определено в словаре и вычислено во время выполнения.Словарь предназначен для использования в качестве шаблона для значения поля.
Я получаю максимальный идентификатор из базы данных и добавляю к нему 1.Это номер строки.Я хочу, чтобы значение, которое вставляется в описание, было, например, Row Num: {row_num} - Num Inserts {num_inserts} - Wait Time {wait_time}
.У меня есть num_inserts и wait_time из файла конфигурации.Они определены заранее.
Я получаю NameError: name 'row_num' is not defined
независимо от того, как я пытался определить row_num в этом словаре.Когда я импортирую словарь, row_num еще не доступен, поэтому возникает ошибка.
Вот небольшой фрагмент моего словаря полей базы данных (в этом примере - таблица пользователей):
all_fields_dict = {
'users':
{
'first_name': {
'db_field' : 'FirstName',
'datatype': 'varchar(50)',
'test_value': {utils.calc_field_value(['zfill', 'FirstName'])}, # another attempt that didn't work
'num_bool': False
},
'username': {
'db_field' : 'username',
'datatype': 'varchar(50)',
'test_value': f"user{utils.get_random_str(5)}", # this works, but it's a diff kind of calculation
'num_bool': False,
},
'description': {
'db_field' : 'description',
'datatype': 'text',
'test_value': f"{utils.get_desc_info(row_num)}", # one of my attempts - fails
'num_bool': False,
},
}
}
Среди прочего я пытался:
{row_num}
:
test_value: f"{row_num"}
, вызывая функцию, которая возвращает номер строки:
def get_row_num()
return row_num
test_value: f"{utils.get_row_num()}
вызов функции, вызывающей функцию get_row_num:
def get_desc_info():
row_num = get_row_num()
return f"Row Num: {row_num} - Wait Time: {wait_time} - Total Inserts: {num_inserts}"
test_value: f"{utils.get_desc_info()}"
Я даже пытался создать функцию с переключателемкоторый возвращает функцию get_row_num, если rnum передается как test_value
def calc_field_value(type):
switcher = {
'rnum': get_row_num(),
etc
}
return switcher[type]
test_value: f"{utils.calc_field_value('rnum')
Я пытался объявить его глобальным практически во всех местах, о которых я могу думать.
Я не пробовал eval из-за всех предупреждений о безопасности, которые я читал об этом.
То же самое, каждый раз.