2017-05-28 67 views
0

您好我目前正在學習python,我無法弄清楚這段代碼。我理解這裏的大部分內容,但無法弄清楚fetchone()[0]部分以及爲什麼當我將[0]更改爲[1],[2]等。我的表格看起來不太好(每個電子郵件計數器是1,因此如果文件中有多個相同的電子郵件,則每個電子郵件都將被複制)。請幫幫我。Python的SQLite fetchone()[0]

import sqlite3 

con= sqlite3.connect('db1.sqlite') 
cur=con.cursor() 

cur.execute('DROP TABLE IF EXISTS TimesSend') 

cur.execute('CREATE TABLE TimesSend(email TEXT,times INTEGER)') 

file=open('file.txt','r') 

for row in file: 
    if not row.startswith('From: '): continue 
    parts= row.split() 
    mail=parts[1] 
    print(mail) 
    cur.execute('SELECT timesFROM TimesSend WHERE email= ?',(mail,)) 
    try: 
     times=cur.fetchone()[0] 
     cur.execute('UPDATE TimesSend SET times=times+1 WHERE email=?', 
(mail,)) 
    except: 
     cur.execute('INSERT INTO TimesSend (email,puta) VALUES(?,1)', 
(mail,)) 
    con.commit() 

回答

-1

你的代碼中有一些問題,請嘗試以下:

import sqlite3 

con= sqlite3.connect('db1.sqlite') 
cur=con.cursor() 

cur.execute('DROP TABLE IF EXISTS TimesSend') 

cur.execute('CREATE TABLE TimesSend(email TEXT,times INTEGER)') 

file=open('file.txt','r') 

for row in file: 
    if not row.startswith('From: '): continue 
    parts= row.split() 
    mail=parts[1] 
    print(mail) 
    cur.execute('SELECT times FROM TimesSend WHERE email= ?',(mail,)) 
    try: 
     times=cur.fetchone()[0] # fetchone() will be a turple (1,), then you should use index 0 to select times 1 
     print(times) 
     cur.execute('UPDATE TimesSend SET times=? WHERE email=?', 
(times+1,mail)) # if duplicate, times+1 
    except: 
     cur.execute('INSERT INTO TimesSend (email,times) VALUES(?,1)', 
(mail,)) 
    con.commit() 
print(cur.execute('SELECT * FROM TimesSend').fetchall()) 
con.close() 

打印輸出將是:

[email protected] 
[email protected] 
1 
[email protected] 
[email protected] 
[email protected] 
[(u'[email protected]', 2), (u'[email protected]', 1), (u'[email protected]', 1), (u'[email protected]', 1)] 
+0

我解決我的問題與一些打印的,並理解了它,但感謝你響應。 –