7

I have a problem with dropping sqlite3 table in python. I am using standard sqlite3 module.

self.conn = sqlite3.connect(...)

sql = """ drop table ? """
self.conn.execute( sql, (u'table_name',) )

gives me OperationalError: near "?": syntax error

When I change sql to:

sql = """ drop table table_name """

it works fine.

Kara
  • 6,115
  • 16
  • 50
  • 57
pajton
  • 15,828
  • 8
  • 54
  • 65

1 Answers1

12

You cannot use parameters for table names nor column names.

Alternatively you could make it a two-step process, e.g.:

a_table_name = "table_a"
sql_stmt = f"""DROP TABLE {a_table_name}"""
self.conn.execute(sql_stmt)

And if you're doing that you may want to explicitly specify which tables can be deleted...

TABLES_THAT_CAN_BE_DROPPED = ('table_a','table_b',)
if a_table_name in TABLES_THAT_CAN_BE_DROPPED:
    # use code snippet from above 
else:
    pass # handle creatively
mechanical_meat
  • 163,903
  • 24
  • 228
  • 223