我正在使用psql数据库和python,并且需要一种将记录数组的每个元素转换为附加到空列表的变量的方法。我还需要尽可能避免全局变量。总体目标是创建一个具有表名的变量,并将该变量设置为等于列标题列表。我可以使用
从数据库中提取包含表名的记录数组tables= db.query2rec("""select table_name from information_schema.tables where table_schema = 'public';""")
其中db和query2rec使用一些psycopg2东西给我
tables= rec.array([('table1',), ('table2',), ('table3',), ('table4',), ('table5',)],
dtype=[('table_name', 'O')])
我需要以
的形式获取table1 = []
table2 = []
table3 = []
table4 = []
table5 = []
然后我可以使用第二个查询,用来自每个表的标题列表填充每个查询。我最大的挑战是将记录数组的元素用作变量名。尽管我花了几个小时研究从酸洗和字典到for循环和全局变量的所有内容,但我不知道如何做。谢谢!
答案 0 :(得分:0)
一个类似的问题已经存在: How do you create different variable names while in a loop?
在您的情况下,您必须遍历元组数组:
tables= rec.array([('table1',), ('table2',), ('table3',), ('table4',), ('table5',)],
dtype=[('table_name', 'O')])
我为此使用了一个'numpy'数组,但也应该在您的数组上工作,这是我使用的代码:
import numpy as np
tables = np.asarray([('table1',), ('table2',), ('table3',), ('table4',), ('table5',)],
dtype=[('table_name', 'O')])
for i in range(len(tables)):
globals()[str(tables[i][0])] = []
输出为:
print(table1)
[]
tables [i] [0]部分将访问元组的第一个元素,它是数组“ i”位置的第一个元素
globals()将为其创建一个全局变量,否则它将只是一个字符串,如果您使用table [i] [0]之类的东西对其进行访问并将其分配给[]只会更改原始数组>