[英]Python SQLite fetchone()[0]
它无法弄清楚fetchone()[0]
部分以及为什么当我将[0]
更改为[1]
、 [2]
等时。我的表看起来不太好(每个电子邮件计数器都是 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 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()
您的代码有问题,请尝试以下操作:
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:
# fetchone() will be a tuple (1,),
# then you should use index 0 to select times 1
times = cur.fetchone()[0]
print(times)
# if duplicate, times+1
cur.execute('UPDATE TimesSend SET times=? WHERE email=?', (times+1, mail))
except:
cur.execute('INSERT INTO TimesSend (email,times) VALUES(?,1)', (mail,))
con.commit()
print(cur.execute('SELECT * FROM TimesSend').fetchall())
con.close()
打印输出将是:
testa@gmail.com
testa@gmail.com
1
testc@gmail.com
testd@gmail.com
testb@gmail.com
[(u'testa@gmail.com', 2), (u'testc@gmail.com', 1), (u'testd@gmail.com', 1), (u'testb@gmail.com', 1)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.