我有一个字典,可以为正在执行的测试创建插入语句。 description字段的插入值需要具有当前行的ID,直到运行程序我才知道。另外,每次插入时,该ID都会增加1,并且每个插入的描述都必须具有其对应的row_num。
我想提前加载表中所有字段的字典,因此我可以使用其中的信息为测试创建insert和alter语句。我不想在代码中对字段的test_value进行硬编码。我希望在字典中定义其中的内容,并在运行时进行计算。该字典本来是我希望字段值成为的模板。
我正在从数据库中获取最大ID,并向其中添加1。那是行号。我希望为描述插入的值例如为Row Num: {row_num} - Num Inserts {num_inserts} - Wait Time {wait_time}
。我从配置文件中获取了num_inserts和wait_time。它们是预先定义的。
无论我如何尝试在此字典中定义row_num,我都会得到NameError: name 'row_num' is not defined
。当我导入字典时,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"}
调用返回行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()}"
我什至尝试过创建一个带有切换器的函数,如果'rnum'作为test_value传入,该切换器将返回get_row_num函数
def calc_field_value(type):
switcher = {
'rnum': get_row_num(),
etc
}
return switcher[type]
test_value: f"{utils.calc_field_value('rnum')
我尝试在几乎我能想到的每个地方将其声明为全局。
我没有尝试过eval,因为我已经阅读了所有的安全警告。
同一件事,每次。
答案 0 :(得分:0)
将test_field
初始化为某个占位符值,或者根本不设置任何值。
然后,在代码中稍后您确实知道该值时,更新字典。