I can't get Python's executemany for sqlite3 to work properly I can't get Python's executemany for sqlite3 to work properly sqlite sqlite

I can't get Python's executemany for sqlite3 to work properly


From what I know of executemany, you meant,

clist = [("abc", ), ("def", ), ("ghi", )]cursor.executemany("INSERT INTO myTable(data) values(?)", clist)

Or something similar. Don't quote me on the syntax for sqlite, I haven't used it in an app in a while, but you need an iterable of tuples (more generally iterables).

It looks like the error you're getting is that it's trying to iterate through each string you're providing, so your statement works like:

clist = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')]

I don't know what your second query is trying to accomplish, but it appears to address a different table, so I'm guessing off of no schema info, but if you change the single character strings to multicharacter strings, it will fail too.


Just to complement the context: In a closely related situation I meant to insert a list of poly-tuples into a table using executemany as such:

res = [("John", "2j4o1h2n"), ("Paula", "lsohvoeemsy"), ("Ben", "l8ers")]cur.executemany("INSERT INTO users (user, password) VALUES (?)", res)

Expecting SQLite to to take one tuple at a time (hence the single ? parameter-substitution in the VALUES field) and splitting it up into its encapsulated attributes (<username>, <password> in this case), it failed with a sqlite3.ProgrammingError exception The current statement uses 1, and there are 2 supplied. as well, as SQLite expects separately substituted attributes in the VALUES (...) field. So this fixes it:

cur.executemany("INSERT INTO users (user, password) VALUES (?, ?)", res)

This is a trivial case but might confuse a little, I hope it might help whoever's stuck.