这个cur.execute语句在做什么?

时间:2017-06-18 16:22:13

标签: python sql sqlite execute

我正在开设Coursera课程,使用Python和SQL数据库。下面的代码主要是课程中的示例代码。我必须改变它以进行任务。

我不完全理解的部分是这部分:

# exec(open("./SQLH152.py").read())

import sqlite3
import re

conn = sqlite3.connect('emaildb.sqlite')
cur = conn.cursor()

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

cur.execute('''
CREATE TABLE Counts (email TEXT, count INTEGER)''')
fname = input('Enter file name: ')
if ( len(fname) < 1 ) : fname = 'mbox-short.txt'
fh = open(fname)
for line in fh:
    if not line.startswith('From: ') : continue
    pieces = line.split()
    email = pieces[1]
    x = re.findall('@(\S+)', email)
    print (x)
    cur.execute('SELECT count FROM Counts WHERE email = ? ', (email, ))
    row = cur.fetchone()
    if row is None:
        cur.execute('''INSERT INTO Counts (email, count) VALUES ( ?, 1 )''', 
        ( email, ) )
    else : 
        cur.execute('UPDATE Counts SET count=count+1 WHERE email = ?', 
        (email, ))
    # This statement commits outstanding changes to disk each 
    # time through the loop - the program can be made faster 
    # by moving the commit so it runs only after the loop completes
    conn.commit()

# https://www.sqlite.org/lang_select.html
sqlstr = 'SELECT email, count FROM Counts ORDER BY count DESC LIMIT 10'

print ("")
print ("Counts:")
for row in cur.execute(sqlstr) :
    print (str(row[0]), row[1])

cur.close()

我的理解是if子句查看电子邮件地址是否已经存在,如果不存在则添加,如果是,则增加计数。但是我不完全理解它是什么“SELECTING”和什么是取物(fetchone)。我对此有一些疑问。

  1. 有人可以直观地向我解释这部分是如何运作的吗?

  2. 我通常习惯使用print语句来查看发生了什么。这里是否有类似的方法可以用来看我在做什么?

  3. 代码'''中的最后一个小问题用于SQL但也用于单个',例如在上面的第一行中(它们在我的Notepad ++中也给出了不同的颜色)。这些之间有什么区别吗?

  4. 注意 - 我使用的是Python 3.6

    <()

0 个答案:

没有答案