Python 编程错误:字符串格式化期间参数的数目错误
我正在尝试将列表中的一些数据主动放入表Python 编程错误:字符串格式化期间参数的数目错误,python,mysql,python-2.7,Python,Mysql,Python 2.7,我正在尝试将列表中的一些数据主动放入表polls\u ip中的数据库中。然而,这似乎是一些争论的问题,可能是因为我想放在里面的数据类型 如果您想查看我的代码中有用的部分: fin_flag = ( tcp.flags & dpkt.tcp.TH_FIN ) != 0 rst_flag = ( tcp.flags & dpkt.tcp.TH_RST ) != 0 if fin_flag or rst_flag: src_ip2 = socket.inet_ntoa(ip.
polls\u ip
中的数据库中。然而,这似乎是一些争论的问题,可能是因为我想放在里面的数据类型
如果您想查看我的代码中有用的部分:
fin_flag = ( tcp.flags & dpkt.tcp.TH_FIN ) != 0
rst_flag = ( tcp.flags & dpkt.tcp.TH_RST ) != 0
if fin_flag or rst_flag:
src_ip2 = socket.inet_ntoa(ip.src)
dst_ip2 = socket.inet_ntoa(ip.dst)
for element in liste:
if element == (src_ip2+" "+dst_ip2) or element == (dst_ip2+" "+src_ip2):
liste.remove(element)
cursor.execute("INSERT INTO polls_ip (Ip) VALUES (%s)", (element))
问题可能来自光标内的行。执行
请查看输出:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "scriptbdd.py", line 134, in run
self.p.dispatch(0, PieceRequestSniffer.cb)
File "scriptbdd.py", line 120, in cb
cursor.execute("INSERT INTO polls_ip (Ip) VALUES (%s)", (element))
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 310, in execute
"Wrong number of arguments during string formatting")
ProgrammingError: Wrong number of arguments during string formatting
即使在(元素,)
中出现昏迷,也会出现另一个问题:
root@debian:/home/florian/Documents/mysite/polls# python scriptbdd.py
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "scriptbdd.py", line 132, in run
self.p.dispatch(0, PieceRequestSniffer.cb)
File "scriptbdd.py", line 120, in cb
cursor.execute("INSERT INTO polls_ip (Ip) VALUES (%s)", (element,))
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 314, in execute
res = self.db().protocol.cmd_query(stmt)
InterfaceError: Failed executing the operation; 'NoneType' object has no attribute 'cmd_query'
你忘了一个逗号:
cursor.execute("INSERT INTO polls_ip (Ip) VALUES (%s)", (element,))
# add a comma here ^
这使得第二个参数成为一个只有一个元素的元组,而不仅仅是一个值
如果您发现更容易使用,可以将第二个参数设置为列表而不是元组:
cursor.execute("INSERT INTO polls_ip (Ip) VALUES (%s)", [element])
元组是使用逗号形成的(只有在消除逗号与其他用途之间的歧义时才真正需要括号),而列表是使用[…]
语法形成的
第二个错误表示数据库连接已关闭;如果数据库连接存储在已清理的本地位置,则无法传递光标。例如,不能在函数中创建数据库连接,只能返回游标;引用连接的局部变量将被清除,并且在使用光标之前连接将关闭。请参见您是否介意更新您的答案,并说明为什么逗号是相关的?例如,逗号使它成为一个元组,而不是对对象求值。@MartijnPieters是的,我以前试过,但它引发了另一个问题,所以我不确定这一点。我编辑了我的answer@Bouh10:该错误与第一个错误完全无关。@Bouh10:这意味着您的数据库连接已关闭。