Home > Mobile >  Getting unexpected result when trying to update a cell
Getting unexpected result when trying to update a cell

Time:11-03

I am trying to update a cell in an existing SQLite database to replace a string with an id:

import sqlite3

TABLES = ['table1', 'table2', ...]
PAR_TYPES_STRINGS = ['foo', 'bar', ...]
PAR_TYPES_ID = [1, 2, ...]

def upateTable(table, parTypeId, parTypeString):
  return f"UPDATE {table} SET par_type = {parTypeId} WHERE par_type = {parTypeString};"

conn = sqlite3.connect('existing_db.db')
cursor = conn.cursor()

for table in TABLES:
  for index, parTypeString in enumerate(PAR_TYPES_STRINGS):
    parTypeId = PAR_TYPES_ID[index]
    cursor.execute(upateTable(table, parTypeId, parTypeString))
conn.commit()
cursor.close()

This gives me :

sqlite3.OperationalError: no such column: foo

Which I do not understand. I am using par_type statically as a column name, and comparing it to parTypeString (which then has foo) in it dynamically.

WHERE par_type = {parTypeString} < dynamicall passed variable
      ^
      hardcoded column name

Yet, it is saying "no such column foo", which is the first element the for loop takes out of PAR_TYPES_STRINGS. Why is that?

CodePudding user response:

In the function definition, you need to put {parTypeString} in quotes: '{parTypeString}', because you want to check where the hardcoded column matches that string. Otherwise the expression is interpreted to check equality between two columns, hence the error message.

  • Related