Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将数据库记录放在Namedtuple中_Python_Sql_Sqlite_Iteration_Namedtuple - Fatal编程技术网

Python将数据库记录放在Namedtuple中

Python将数据库记录放在Namedtuple中,python,sql,sqlite,iteration,namedtuple,Python,Sql,Sqlite,Iteration,Namedtuple,我正在尝试用python(2.7)编写一些代码,以实现以下目的: 在sqlite中打开数据库 对数据库进行查询,得到一些结果。数据库有多个表,我需要来自不同表的记录: 数据库如下所示: data.db-->[表1[col1,col2,col3],表2[col1,col2,col3]] 反复浏览结果 对结果做些什么(例如,在记录中有一个需要解码的日期) 将所有记录存储在namedtuple中以供进一步访问 从现在起,我已经完成了第1、2、3和4部分,但我不知道如何将结果存储在命名的元组中。假设

我正在尝试用python(2.7)编写一些代码,以实现以下目的:

  • 在sqlite中打开数据库
  • 对数据库进行查询,得到一些结果。数据库有多个表,我需要来自不同表的记录: 数据库如下所示:
    • data.db-->[表1[col1,col2,col3],表2[col1,col2,col3]]
  • 反复浏览结果
  • 对结果做些什么(例如,在记录中有一个需要解码的日期)
  • 将所有记录存储在namedtuple中以供进一步访问
  • 从现在起,我已经完成了第1、2、3和4部分,但我不知道如何将结果存储在命名的元组中。假设在每次迭代中,我都将所需的数据存储在namedtuple中的临时变量中:

    对于结果中的结果:

    var1=table1.col1

    var2=table2.col1

    var3=表3.col1

    (现在我想对变量做点什么,但这不是问题所在,将3个变量存储在一个命名的整数中)

    namedtuple()
    只不过是一个使用工厂函数生成的类:

    SomeRowResult = namedtuple('SomeRowResult', 'var1 var2 var3')
    
    这里的
    SomeRowResult
    是一个类对象(tuple的子类),调用它将创建类的实例:

    for result in results:
        result = SomeRowResult(table1.col1, table2.col1, table3.col1)
    
    如果希望获得这些结果的列表,则需要显式构建该列表:

    all_results = []
    for result in results:
        result = SomeRowResult(table1.col1, table2.col1, table3.col1)
        all_results.append(result)
    

    谢谢你的回复。我添加了我的代码。有语法错误吗?因为它还不能正常工作。为了进行测试,我试图遍历“联系人”并打印结果,但结果显示:TypeError:“type”对象不可编辑。@user3013106:您发布的代码应该可以正常工作;您确定没有为代码中的任何位置的
    联系人
    分配任何其他内容吗?@user301306:另外,
    TypeObject
    看起来与
    namedtuple
    完全无关。这方面的追溯是什么?到底是哪一行代码引发了这个错误?不。我正在用以下代码进行测试:打印联系人返回:对于联系人中的行:打印行,它返回的是不可编辑的(对不起,我不知道如何将注释中的代码格式化为可读形式)@Rigel:是的,您可以循环查看
    所有结果
    ;每个项都是一个名为tuple的
    实例,包含您定义的所有属性。但是,不能在创建实例的类上循环。这就像试图循环使用
    dict
    tuple
    来获取程序中创建的所有字典或tuple。Python不是这样工作的。
    all_results = []
    for result in results:
        result = SomeRowResult(table1.col1, table2.col1, table3.col1)
        all_results.append(result)