Closed
Description
If I try to add a list of dict
s to an empty table using upsert_all
, I get an error:
import sqlite3
from sqlite_utils import Database
import pandas as pd
conx = sqlite3.connect(':memory')
cx = conx.cursor()
cx.executescript('CREATE TABLE "test" ("Col1" TEXT);')
q="SELECT * FROM test;"
pd.read_sql(q, conx) #shows empty table
db = Database(conx)
db['test'].upsert_all([{'Col1':'a'},{'Col1':'b'}])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-74-8c26d93d7587> in <module>
1 db = Database(conx)
----> 2 db['test'].upsert_all([{'Col1':'a'},{'Col1':'b'}])
/usr/local/lib/python3.7/site-packages/sqlite_utils/db.py in upsert_all(self, records, pk, foreign_keys, column_order, not_null, defaults, batch_size, hash_id, alter, extracts)
1157 alter=alter,
1158 extracts=extracts,
-> 1159 upsert=True,
1160 )
1161
/usr/local/lib/python3.7/site-packages/sqlite_utils/db.py in insert_all(self, records, pk, foreign_keys, column_order, not_null, defaults, batch_size, hash_id, alter, ignore, replace, extracts, upsert)
1040 sql = "INSERT OR IGNORE INTO [{table}]({pks}) VALUES({pk_placeholders});".format(
1041 table=self.name,
-> 1042 pks=", ".join(["[{}]".format(p) for p in pks]),
1043 pk_placeholders=", ".join(["?" for p in pks]),
1044 )
TypeError: 'NoneType' object is not iterable
A hacky workaround in use is:
try:
db['test'].upsert_all([{'Col1':'a'},{'Col1':'b'}])
except:
db['test'].insert_all([{'Col1':'a'},{'Col1':'b'}])
Metadata
Metadata
Assignees
Labels
No labels