sqlite error binding parameter 0 - probably unsupported type
Verfasst: Freitag 28. August 2015, 14:27
Hallo zusammen,
ich habe folgendes stranges verhalten oder Tomaten auf den Augen.
Hier ein paar Ausschnitte aus dem Code
fwg_count_selected sie wie folgt aus (('1234', 500),('87754', 560),('5545', 20))
Beim ersten durchlauf wird die Schleife "for fwg, selected_count in fwg_count_selected" (zeile 31)
sauber abgearbeitet.
Beim 2. bekomme ich in zeile 59 "error binding parameter 0 - probably unsupported type"
- fwg ist imme ein string
- das DB feld fwg ist als "text" definiert
Mit folgender konstellation wird zuerst die exception geschmissen und in except die methode fehlerfrei aufgerufen
was auch immer funktioniert ist:
sql = "select * from preqc where fwg=%s AND selected is NULL" % fwg
ich finde einfach den Fehler nicht.
danke
chris
ich habe folgendes stranges verhalten oder Tomaten auf den Augen.
Hier ein paar Ausschnitte aus dem Code
Code: Alles auswählen
sql.py:
def sql_preqc_get_by_fwg():
""" returns a select sql statement to select all items by fwg """
sql = "SELECT * FROM preqc WHERE fwg=? AND selected IS NULL"
return sql
itemfilter.py:
...
from lib.sql import sql_preqc_get_by_fwg
...
def filter_items_by_upcs(self):
"""filter items by a list up upcs
:return:
"""
item_db = self._item_db
week_db = DatabaseService('sqlite', self._rd_controller.target.app_preqc_file)
if self._options.del_selected:
week_db.execute(sql_preqc_clear_filter_tag())
try:
self._flag_by_fwg(week_db, item_db)
except Exception as e:
logger.error('%s flag_by_items failed - %s ' % (self._rd_controller.whoiam, e))
raise Exception(e)
def _flag_by_fwg(self, week_db, item_db):
""" """
fwg_count_selected = week_db.get_data(sql_preqc_get_count_fwg_selected())
for fwg, selected_count in fwg_count_selected:
try:
#ignore FWG Zero - stoe doesnot have FWGs
tmp_fwg = int(fwg)
if not tmp_fwg:
continue
except:
pass
#TODO remove after recreate all dbs new
if " " in fwg:
fwg = "'%s'" % fwg
week_count = week_db.get_data(sql_preqc_get_count_fwg(), (fwg,))
week_count = week_count[0][0]
ratio = 0
if week_count:
ratio = round(selected_count * 100 / week_count)
else:
print("-%s-" % fwg) #TODO TEST
if ratio < int(settings.ifilter_fwg_ratio):
continue
#fix ratio 1 because 1 is the selection flag for selected by item - ratio muss nicht genau sein
ratio = 2 if ratio == 1 else ratio
for selected in week_db.fetch_many(sql_preqc_get_by_fwg(), (fwg,)):
self._update_week_db(week_db, selected, ratio)
database.py:
def fetch_many(self, query, data=None, limit=10000):
"""
@query: the sql statement
@data: a list of values
@data: the limit
:return:
"""
try:
cursor = self._connect.cursor()
if data:
cursor.execute(query, data)
else:
cursor.execute(query)
while True:
results = cursor.fetchmany(limit)
if not results:
break
yield results
except Exception as e:
error = 'fetch_many: ' + str(e)
raise Exception(error)
finally:
cursor.close()
Beim ersten durchlauf wird die Schleife "for fwg, selected_count in fwg_count_selected" (zeile 31)
sauber abgearbeitet.
Beim 2. bekomme ich in zeile 59 "error binding parameter 0 - probably unsupported type"
- fwg ist imme ein string
- das DB feld fwg ist als "text" definiert
Mit folgender konstellation wird zuerst die exception geschmissen und in except die methode fehlerfrei aufgerufen



Code: Alles auswählen
try:
for selected in week_db.fetch_many(sql_preqc_get_by_fwg(), (fwg, )):
self._update_week_db(week_db, selected, ratio)
except:
for selected in week_db.fetch_many(sql_preqc_get_by_fwg(), (fwg, )):
self._update_week_db(week_db, selected, ratio)
sql = "select * from preqc where fwg=%s AND selected is NULL" % fwg
ich finde einfach den Fehler nicht.
danke
chris