我在 Windows 7 中使用 python 2.7。
我编写了一个程序将从文本文件读取的一些数据插入到 SQLite3 数据库中。
但是,我发现插入了重复的数据,因为文本文件中存在重复的数据:
1A
2A
3A
4A
5乙
conn = sqlite3.connect('Static_Analysis.db')
c = conn.cursor()
c.execute('''CREATE TABLE MAIN
(
NAME TEXT NOT NULL,
Error_List CHAR(50),
Warning_List CHAR(50),
Advice_List CHAR(50),
Total CHAR(50),
Note CHAR(50));''')
c.execute('''CREATE TABLE ERROR_REPORT
(
NAME TEXT NOT NULL);''')
c.execute('''CREATE TABLE WARNING_REPORT
(
NAME TEXT NOT NULL);''')
c.execute('''CREATE TABLE ADVICE_REPORT
(
NAME TEXT NOT NULL);''')
file = open("summary.log",'r')
p1 = re.compile(r"[Error ]")
p2 = re.compile("[Warning]")
p3 = re.compile(r"[Advice ]")
i = 1
m_i = 0
n_i = 0
p_i = 0
for line in file:
if '[Error ]' in line:
str = line.split(":")
print str
conn.execute("INSERT INTO MAIN (NAME) VALUES (\"%s\")" % (str[0]
[9:]))
conn.execute("INSERT INTO ERROR_REPORT (NAME) VALUES (\"%s\")" %
(str[-1]))
elif '[Warning]' in line:
str = line.split(":")
conn.execute("INSERT INTO MAIN (NAME) VALUES (\"%s\")" % (str[0]
[9:]))
conn.execute("INSERT INTO WARNING_REPORT (NAME) VALUES (\"%s\")" %
(str[-1]))
elif '[Advice ]' in line:
p_i = p_i + 1
str = line.split(":")
conn.execute("INSERT INTO MAIN (NAME) VALUES (\"%s\")" % (str[0]
[9:]))
conn.execute("INSERT INTO ADVICE_REPORT (NAME) VALUES (\"%s\")" %
(str[-1]))
else:
i = i - 1
i = i + 1
Run Code Online (Sandbox Code Playgroud)
我想将结果表更改为:
1A
2乙
如何修改代码以避免将重复数据插入数据库?
这取决于您想对“避免重复”施加多少限制。严格来说,您可以通过向表添加约束来避免任何重复:
CREATE TABLE MAIN
(
NAME TEXT NOT NULL,
Error_List CHAR(50),
Warning_List CHAR(50),
Advice_List CHAR(50),
Total CHAR(50),
Note CHAR(50),
UNIQUE (NAME, Error_List, Warning_List, Advice_List, Total, Note) ON CONFLICT IGNORE
);
Run Code Online (Sandbox Code Playgroud)
在此示例中,当约束跨越多个列时,我使用了“表约束”。如果您想避免重复单个值,您还可以使用“列约束”。对于这两种情况,您都可以更改冲突响应,IGNORE、REPLACE、ABORT等,具体取决于您希望引发的行为。这些冲突响应也可以在 INSERT 语句中设置为:
INSERT OR REPLACE INTO MAIN (...) VALUES (...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4779 次 |
| 最近记录: |