html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,issue,performed_via_github_app
https://github.com/simonw/sqlite-utils/issues/73#issuecomment-571138093,https://api.github.com/repos/simonw/sqlite-utils/issues/73,571138093,MDEyOklzc3VlQ29tbWVudDU3MTEzODA5Mw==,82988,2020-01-06T13:28:31Z,2020-01-06T13:28:31Z,NONE,"I think I actually had several issues in play...
The missing key was one, but I think there is also an issue as per below.
For example, in the following:
```python
def init_testdb(dbname='test.db'):
if os.path.exists(dbname):
os.remove(dbname)
conn = sqlite3.connect(dbname)
db = Database(conn)
return conn, db
conn, db = init_testdb()
c = conn.cursor()
c.executescript('CREATE TABLE ""test1"" (""Col1"" TEXT, ""Col2"" TEXT, PRIMARY KEY (""Col1""));')
c.executescript('CREATE TABLE ""test2"" (""Col1"" TEXT, ""Col2"" TEXT, PRIMARY KEY (""Col1""));')
print('Test 1...')
for i in range(3):
db['test1'].upsert_all([{'Col1':'a', 'Col2':'x'},{'Col1':'b', 'Col2':'x'}], pk=('Col1'))
db['test2'].upsert_all([{'Col1':'a', 'Col2':'x'},{'Col1':'b', 'Col2':'x'}], pk=('Col1'))
print('Test 2...')
for i in range(3):
db['test1'].upsert_all([{'Col1':'a', 'Col2':'x'},{'Col1':'b', 'Col2':'x'}], pk=('Col1'))
db['test2'].upsert_all([{'Col1':'a', 'Col2':'x'},{'Col1':'b', 'Col2':'x'},
{'Col1':'c','Col2':'x'}], pk=('Col1'))
print('Done...')
---------------------------------------------------------------------------
Test 1...
Test 2...
IndexError: list index out of range
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
in
22 print('Test 2...')
23 for i in range(3):
---> 24 db['test1'].upsert_all([{'Col1':'a', 'Col2':'x'},{'Col1':'b', 'Col2':'x'}], pk=('Col1'))
25 db['test2'].upsert_all([{'Col1':'a', 'Col2':'x'},{'Col1':'b', 'Col2':'x'},
26 {'Col1':'c','Col2':'x'}], pk=('Col1'))
/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)
1097 # self.last_rowid will be 0 if a ""INSERT OR IGNORE"" happened
1098 if (hash_id or pk) and self.last_rowid:
-> 1099 row = list(self.rows_where(""rowid = ?"", [self.last_rowid]))[0]
1100 if hash_id:
1101 self.last_pk = row[hash_id]
IndexError: list index out of range
```
the first test works but the second fails. Is the length of the list of items being upserted leaking somewhere?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",545407916,