2017-09-14 2 views
0

ich den Inhalt der Variablen in eine SQLite DB hinzufügen bin versucht, aber ich bin immer einen Fehler vonPython SQLite Einfügen von Daten aus Variablen

sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type. 

Mein Code ist: -

import requests 
import json 
import eventlet 
import os 
import sqlite3 

#Get the currect vuln_sets 
response = requests.get('https://vulners.com/api/v3/search/stats/') 
vuln_set = json.loads(response.text) 
vuln_type = vuln_set['data']['type_results'] 
for k in vuln_type: 
    vuln_bulletinfamily = vuln_set['data']['type_results'][k]['bulletinFamily'] 
    vuln_name = vuln_set['data']['type_results'][k]['displayName'] 
    vuln_count = vuln_set['data']['type_results'][k]['count'] 



con = sqlite3.connect('vuln_sets.db') 
with con: 
    cur = con.cursor() 
    con.row_factory = sqlite3.Row 


    cur.execute("REPLACE INTO vuln_sets (vulntype, displayname, bulletinfamily, count) values (?, ?, ?, ?)", (vuln_type, vuln_bulletinfamily, vuln_name, vuln_count)) 
    con.commit() 

Die Variablen enthalten die JSON-Schlüsselpaare, da ich einige von ihnen zur Verarbeitung in das DB einfügen muss, aber ein anderes Projekt.

Der Stacktrace ist:

Traceback (most recent call last): 
    File "test.py", line 24, in <module> 
    cur.execute("REPLACE INTO vuln_sets (vulntype, displayname, bulletinfamily, count) values (?, ?, ?, ?);", (vuln_type, vuln_bulletinfamily, vuln_name, vuln_count)) 
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type. 
+0

können Sie einen vollständigen StackTrace geben? – zython

+2

'vuln_type' ist eine Liste. Ich kann das sehen, weil Sie es früher im Code durchlaufen haben. Sie können keine Liste einfügen. Ich denke, dass Sie möchten, dass der gesamte eingerückte Code innerhalb der Schleife "for k in vuln_type:" liegt und ersetzen Sie "vuln_type" durch "k" in Ihrer Abfrage. – roganjosh

+0

Der Stacktrace über – Luke

Antwort

0

@ Kommentar Rogan Josh ist es fest! Ich musste die DB-Transaktionen in der for-Schleife wie folgt einbinden:

import requests 
import json 
import eventlet 
import os 
import sqlite3 

#Get the currect vuln_sets 
response = requests.get('https://vulners.com/api/v3/search/stats/') 
vuln_set = json.loads(response.text) 
vuln_type = vuln_set['data']['type_results'] 
for k in vuln_type: 
    vuln_bulletinfamily = vuln_set['data']['type_results'][k]['bulletinFamily'] 
    vuln_name = vuln_set['data']['type_results'][k]['displayName'] 
    vuln_count = vuln_set['data']['type_results'][k]['count'] 
    con = sqlite3.connect('vuln_sets.db') 
    with con: 
     cur = con.cursor() 
     con.row_factory = sqlite3.Row  
     cur.execute("REPLACE INTO vuln_sets (vulntype, displayname, bulletinfamily, count) values (?, ?, ?, ?)", (k, vuln_name, vuln_bulletinfamily, vuln_count)) 
     con.commit() 
Verwandte Themen