python - sqlite3.InterfaceError:错误绑定参数 2 - 可能是不受支持的类型。nmap 开放端口打印值未存储在 sql 表中给出错误
问题描述
sqlite3.InterfaceError:错误绑定参数 2 - 可能是不受支持的类型。
出现此错误是因为dict_keys
无法存储在表列中Opened_ports
。代码对于 SQL 部分是可以的,它是如何dict_keys
显示的格式dict_keys([53, 80, 111, 443])
,它没有被存储。
我试过ns[ip_addr]['tcp'].keys().list()
没用说dict_keys
没有属性list()
。
def db(*args):
with sqlite3.connect('Test.db') as db:
cursor = db.cursor()
ns, ip_addr, ports = args
cursor.execute('''
CREATE TABLE IF NOT EXISTS Scaninfo(
scanID INTEGER PRIMARY KEY,
ip_address VARCHAR(40) NOT NULL,
scanned_ports VARCHAR(100) NOT NULL,
Opened_ports VARCHAR(100),
Hostname VARCHAR(100) NOT NULL,
ipaddress_state VARCHAR(100) NOT NULL);
''')
cursor.execute("insert into Scaninfo (ip_address, scanned_ports, Opened_ports ,Hostname, ipaddress_state) values (?, ?, ?, ?, ?)",
(ip_addr, ports, ns[ip_addr]['tcp'].keys(), ns[ip_addr].hostname(), ns[ip_addr].state() ))
db.commit()
def Report_csv():
db_name = 'Test.db'
engine = create_engine('sqlite:///' + db_name)
df = pd.read_sql_table('Scaninfo', engine)
df.to_csv('test.csv')
Report_csv()
解决方案
我在 def db() 中添加了这个
for proto in ns[ip_addr].all_protocols():
lport = ns[ip_addr][proto].keys()
sorted(lport)
port2 = ','
port1= port2.join(str(port) for port in lport)
(ip_addr, ports, port1, ns[ip_addr].hostname(), ns[ip_addr].state() ))
现在它可以工作了
推荐阅读
- latex - 将页面划分为块/部分
- javascript - 如果找到特定值,如何停止在 EventBus 中发送数据?
- php - 从php在ubuntu上执行比特币应用程序的命令-没有结果
- c# - 在 asp.net core 中找不到视图
- wordpress - 技术支持:Elementor pro 我们如何在邮箱中删除?
- c# - Solidworks API AddMenuItem
- python - Django:在 Django 视图中获取一个表
- javascript - 提交联系表7时如何防止Magnific Popup关闭?
- react-native - react-native-image-crop-picker 显示图像
- kdb - 如何在 KDB+/Q 中的代码功能内对表选择运行透视操作