これを行うpython(2.7)でコードを書き込もうとしています:
- sqlite でデータベースを開く
- データベースにクエリを実行し、いくつかの結果を取得します。データベースには複数のテーブルがあり、さまざまなテーブルからのレコードが必要です: データベースは次のようになります:
- data.db ---> [table1[col1, col2, col3], table2[col1, col2, col3]]
- 結果を繰り返す
- 結果に対して何かを行います(たとえば、レコードにはデコードが必要な日付があります)
- さらにアクセスできるように、すべてのレコードを名前付きタプルに保存します
今からパート1、2、3、4を達成しましたが、結果を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