Python将数据库记录放入Namedtup中

2024-09-28 23:46:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python(2.7)编写一些代码:

  1. 在sqlite中打开数据库
  2. 对数据库进行查询,得到一些结果。数据库有多个表,我需要不同表中的记录: 数据库如下:
    • 在数据数据库--->;[表1[col1,col2,col3],表2[col1,col2,col3]]
  3. 迭代结果
  4. 对结果做些什么(例如在一个记录中有一个日期需要解码)
  5. 将所有记录存储在namedtuple中以供进一步访问

从现在起,我已经完成了第1、2、3和4部分,但是我不知道如何将结果存储在namedtuple中。假设在每次迭代中,我将需要的数据存储在namedtuple中的临时变量中:

for result in results:
var1 = table1.col1
var2 = table2.col1
var3 = table3.col1

(现在我想对这个变量做点什么,但这不是问题所在,并将3个变量存储在namedtuple中)

contacts = namedtuple('contacts', 'Z_PK ZFULLNAME ZPHONE ZTEXT ZDATE')

    if has_contacts_sqlite:

        # reading contacts from database
        # 1st step: ZWAPHONE table
        query = "SELECT * FROM ZWAPHONE"
        self.tempcur.execute(query)
        tempcontacts = self.tempcur.fetchall()

        for contact in tempcontacts:
            id = contact.Z_PK
            contact_key = contact.ZCONTACT
            favorite_key = contact.ZFAVORITE
            status_key = contact.ZSTATUS
            phonenum = contact.ZPHONE

            # 2nd step: name from ZWACONTACT table
            query = "SELECT * FROM ZWACONTACT WHERE Z_PK=?;"
            self.tempcur.execute(query, [contact_key])
            contact_entry = self.tempcur.fetchone()
            if contact_entry == None:
                name = "N/A"
            else:
                name = contact_entry.ZFULLNAME

            # 3rd step: status from ZWASTATUS table
            query = "SELECT * FROM ZWASTATUS WHERE Z_PK=?;"
            self.tempcur.execute(query, [status_key])
            status_entry = self.tempcur.fetchone()
            if status_entry == None:
                text = "N/A"
                date = "N/A"
            else:
                text = status_entry.ZTEXT
                date = self.formatDate(status_entry.ZDATE)

            #print ("%s" %(id))
            #print ("%s" %(name.encode(sys.stdout.encoding, errors='replace')))
            #print ("%s" %(phonenum.encode(sys.stdout.encoding, errors='replace')))
            #print ("%s" %(text.encode(sys.stdout.encoding, errors='replace')))
            #print ("%s" %(date))

            contact = contacts(id, name, phonenum, text, date)


print contacts
for line in contacts:
    print line

Tags: keytextnameself数据库statuscontactquery
1条回答
网友
1楼 · 发布于 2024-09-28 23:46:57

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

SomeRowResult = namedtuple('SomeRowResult', 'var1 var2 var3')

这里SomeRowResult是一个类对象(一个tuple的子类),调用它将创建该类的实例:

^{pr2}$

如果要获得这些结果的列表,则需要显式地构建该列表:

^{3}$

相关问题 更多 >