Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete a table in SQLAlchemy?

I want to delete a table using SQLAlchemy.

Since I am testing over and over again, I want to delete the table my_users so that I can start from scratch every single time.

So far I am using SQLAlchemy to execute raw SQL through the engine.execute() method:

sql = text('DROP TABLE IF EXISTS my_users;') result = engine.execute(sql) 

However, I wonder if there is some standard way to do so. The only one I could find is drop_all(), but it deletes all the structure, not only one specific table:

Base.metadata.drop_all(engine)   # all tables are deleted 

For example, given this very basic example. It consists on a SQLite infrastructure with a single table my_users in which I add some content.

from sqlalchemy import create_engine, Column, Integer, String, text from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base  engine = create_engine('sqlite://', echo=False) Base = declarative_base()  class User(Base):     __tablename__ = "my_users"      id = Column(Integer, primary_key=True)     name = Column(String)      def __init__(self, name):         self.name = name  # Create all the tables in the database which are # defined by Base's subclasses such as User Base.metadata.create_all(engine)  # Construct a sessionmaker factory object session = sessionmaker()  # Bind the sessionmaker to engine session.configure(bind=engine)  # Generate a session to work with s = session()  # Add some content s.add(User('myname')) s.commit()  # Fetch the data print(s.query(User).filter(User.name == 'myname').one().name) 

For this specific case, drop_all() would work, but it won't be convenient from the moment I start having more than one table and I want to keep the other ones.

like image 563
fedorqui 'SO stop harming' Avatar asked Mar 10 '16 14:03

fedorqui 'SO stop harming'


People also ask

How do I delete a table in SQLAlchemy Python?

Just call drop() against the table object.

How do I delete a SQLAlchemy database?

Delete table elements in SQLAlchemy. Get the books table from the Metadata object initialized while connecting to the database. Pass the delete query to the execute() function and get all the results using fetchall() function.

How do I drop a table in SQLite?

To drop a table in SQLite, use the DROP TABLE statement. Running this statement removes the table from the database. It is completely removed from the database schema and the disk file. Therefore the table can not be recovered.


1 Answers

Just call drop() against the table object. From the docs:

Issue a DROP statement for this Table, using the given Connectable for connectivity.

In your case it should be:

User.__table__.drop() 

If you get an exception like:

sqlalchemy.exc.UnboundExecutionError: Table object 'my_users' is not bound to an Engine or Connection. Execution can not proceed without a database to execute against 

You need to pass the engine:

User.__table__.drop(engine) 
like image 145
daveoncode Avatar answered Oct 08 '22 21:10

daveoncode