python - python脚本没有保存到数据库中
问题描述
我目前正在学习如何使用 Visual Studio 和 sqlite 使用 python 修改数据。我的任务是计算在一个文件中找到了多少次电子邮件,然后以一种对每封电子邮件进行计数的方式组织它们。然后我必须将这些作为一个名为 Counts 的表输入到 SQLite 中,其中包含两行 (org,count)。我编写了一个运行程序并将其输出到视觉工作室输出屏幕而不是数据库的代码。
这是我的程序:
import sqlite3
conn = sqlite3.connect('database3.db')
cur = conn.cursor()
cur.execute('DROP TABLE IF EXISTS Counts')
cur.execute('''CREATE TABLE Counts (email TEXT, count INTEGER)''')
#cur.execute("INSERT INTO Counts Values('mlucygray@gmail.com',1)")
# Save (commit) the changes
conn.commit()
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]
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,))
cur.execute('SELECT * FROM Counts')
# https://www.sqlite.org/lang_select.html
sqlstr = 'SELECT email, count FROM Counts ORDER BY count DESC LIMIT 10'
conn.commit()
for row in cur.execute(sqlstr):
print(str(row[0]), row[1])
conn.commit()
cur.close()
感谢您的任何建议
解决方案
您需要使用 insert/update 提交更改,并且在执行 select 语句后不需要提交。
for line in fh:
if not line.lower().startswith('from: '): continue
pieces = line.split()
email = pieces[1]
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,))
conn.commit()
sqlstr = 'SELECT email, count FROM Counts ORDER BY count DESC LIMIT 10'
for row in cur.execute(sqlstr):
print(str(row[0]), row[1])
cur.close()
推荐阅读
- android - 在 Android Studio 中生成签名的 apk 时发生错误
- java - 从配置中动态读取@JsonProperty
- sql-server - SQL Server全文搜索:词的解析形式不同的结果
- c# - Enterprise Architect的元素注释中未显示新行
- react-native - React Native:无法使用地理定位 API 访问位置
- python - Pandas:如何按索引值添加行值
- php - Doctrine ORM:按 2 个类别过滤文章
- angular - angular 2+中的通用组件+通用服务
- xml - 如何验证嵌套元素中的唯一属性?
- java - Tomcat 9 在 Ubuntu 上无法与 Java 10 一起使用