我正在开设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)。我对此有一些疑问。
有人可以直观地向我解释这部分是如何运作的吗?
我通常习惯使用print语句来查看发生了什么。这里是否有类似的方法可以用来看我在做什么?
代码'''中的最后一个小问题用于SQL但也用于单个',例如在上面的第一行中(它们在我的Notepad ++中也给出了不同的颜色)。这些之间有什么区别吗?
<()