Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python sqlite3 parameterized drop table

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.

like image 650
pajton Avatar asked Apr 09 '11 20:04

pajton


People also ask

How do I drop a table in SQLite python?

To drop a table from a SQLite3 database using python invoke the execute() method on the cursor object and pass the drop statement as a parameter to it.

Are there restrictions on dropping tables in SQLite?

In this syntax, you specify the name of the table which you want to remove after the DROP TABLE keywords. SQLite allows you to drop only one table at a time. To remove multiple tables, you need to issue multiple DROP TABLE statements. If you remove a non-existing table, SQLite issues an error.

How do I DELETE data from SQLite database in Python?

Deleting data using pythonCreate a cursor object by invoking the cursor() object on the (above created) Connection object. Then, invoke the execute() method on the cursor object, by passing an DELETE statement as a parameter to it.

How do you DELETE a table in SQLite?

The TRUNCATE TABLE statement is used to remove all records from a table. SQLite does not have an explicit TRUNCATE TABLE command like other databases. Instead, it has added a TRUNCATE optimizer to the DELETE statement. To truncate a table in SQLite, you just need to execute a DELETE statement without a WHERE clause.


1 Answers

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
like image 184
mechanical_meat Avatar answered Sep 30 '22 05:09

mechanical_meat