Я хочу удалить таблицу с помощью SQLAlchemy.
Поскольку я тестирую снова и снова, я хочу удалить таблицу my_users
, чтобы я мог начинать с нуля каждый раз.
До сих пор я использую SQLAlchemy для выполнения raw SQL с помощью метода engine.execute():
sql = text('DROP TABLE IF EXISTS my_users;')
result = engine.execute(sql)
Однако, мне интересно, есть ли какой-то стандартный способ сделать это. Единственное, что я мог найти, это drop_all()
, но он удаляет всю структуру, а не только одну конкретную таблицу:
Base.metadata.drop_all(engine) # all tables are deleted
Например, учитывая этот очень простой пример. Он состоит из инфраструктуры SQLite с единственной таблицей my_users
, в которую я добавляю некоторый контент.
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 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)
В этом конкретном случае drop_all()
будет работать, но это будет не удобно с момента, когда я начну иметь более одной таблицы, и я хочу сохранить другие.