繁体   English   中英

Python SQLite fetchone()[0]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM