与回溯错误和操作错误作斗争



错误:

Traceback(最近调用last(:文件;read_data_two.py";,第59行,ininsertIntoTable(info,count(File";read_data_two.py";,线42&43,插入IntoTablecursor.execute("INSERT INTO New_Packet VALUES(%s,%s,%s、%s、%s(";,(local_time,IP_Protocol,src_address,dest_address,transport_procol((sqlite3.OperationalError:接近"%":语法错误

上下文:我正在编写一个代码,该代码将逐行从文件中读取。它将读取文本文件中的每一行。然后,它会将行拆分为一个列表,列表的每个索引都将包含不同的属性(在这种情况下,这些属性将是关于数据包的信息(传输协议、src_address、dest_address、IP协议和本地时间(。尝试从列表中插入元素时出错。我尝试了多种方法,但当我从列表中输入元素时,它实际上会被读取为字符串。我尝试了%s,但它现在导致了%符号附近的错误。此外,我不明白为什么在调用insertIntoTable((函数时会出现错误。

1) import sqlite3 #Gives program access to the sqlite3 module
2)
3)
4)def insertIntoTable(info, count):
5)  print(count)
6)  #print(type(info))
7)  local_time = info[0]
8)  #print(local_time)
9)  #print(type(local_time))
10) #print(info[0])
11)
12) IP_Protocol = info[1]
13) #print(type(IP_Protocol))
14) #print(info[1])
15)
16) src_address = info[2]
17) #print(info[2])
18)
19) dest_address = info[3]
20) #print(info[3x])
21)
22) transport_protocol = info[4]
23) #print(info[4])
24) #print(" ")
25)
26) connection = sqlite3.connect("PacketInfo.db")   #sqlite3.cnnect() function returns objects 27) #that will be used to interact with database 
28) cursor = connection.cursor()   #creates cursor object used to SQL statements to a SQLite 
29)
30)
31) #if count == 0:
32) if count == 0:
33)     cursor.execute("CREATE TABLE IF NOT EXISTS New_Packet (local_time VARCHAR , IP_Protocol 34)  VARCHAR, src_address VARCHAR, dest_address VARCHAR, transport_protocol VARCHAR)")
35) connection.commit()
36)     count += 1
37)     #count += 1
38)
39) #print(count)
40) #cursor.execute(f "INSERT INTO table VALUES {local_time}, {IP_Protocol}, {src_address}, 
41){dest_address}, {transport_protocol},")
42) cursor.execute("INSERT INTO New_Packet VALUES (%s, %s, %s, %s, %s)", (local_time, 
43)  IP_Protocol, src_address, dest_address, transport_protocol))
44) connection.commit()

45) rows = cursor.execute("SELECT* FROM New_Packet").fetchall()   #fetchall() retrieves all the 
46) connection.commit()
47) #print("Made it")
48) print(rows)
49) cursor.close()
50) return
51)file = open("packets.txt","r")
52)list_of_info = []
53)count = 0
54)for line in file.readlines():  
55)        if not line:
56)         break
57)        info = line.split()
58)        print(info)
59)        insertIntoTable(info, count) 

sqlite的变量替换占位符是?而不是%s。例如,您的插入语句应该是:

cursor.execute("INSERT INTO New_Packet VALUES (?, ?, ?, ?, ?)", (local_time, IP_Protocol, src_address, dest_address, transport_protocol))

最新更新