8

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.

1 Answer 1

13

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
Sign up to request clarification or add additional context in comments.

3 Comments

Too bad, I wanted to use executemany() with list of tables. Any idea if this would be somehow feasible?
Is looping over the table names too slow?
Of course not. I just love to make the things as simpliest as possible:). Thanks for the answer!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.