Comment supprimer une table dans SQLAlchemy?
Je veux supprimer une table à l'aide de SQLAlchemy.
Depuis que je suis en train de tester encore et encore, je veux supprimer la table my_users
afin que je puisse commencer à partir de zéro à chaque fois.
Jusqu'à présent, je suis à l'aide de SQLAlchemy pour exécuter SQL brut par le biais de la moteur.execute() méthode:
sql = text('DROP TABLE IF EXISTS my_users;')
result = engine.execute(sql)
Cependant, je me demande si il y a des façon de le faire. La seule que j'ai pu trouver est drop_all()
mais il supprime toute la structure, non seulement à une table spécifique:
Base.metadata.drop_all(engine) # all tables are deleted
Par exemple, dans cet exemple très simple. Elle se compose d'une SQLite infrastructure avec une seule table my_users
dans laquelle j'ai ajouté un peu de contenu.
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)
Pour ce cas précis, drop_all()
pourrait fonctionner, mais il ne sera pas pratique à partir du moment où je commence à avoir plus d'une table et je veux garder l'autre.
source d'informationauteur fedorqui
Vous devez vous connecter pour publier un commentaire.
Appelez simplement
drop()
à l'encontre de l'objet de la table.De les docs:
Dans votre cas, il doit être:
Si vous obtenez une exception comme:
Vous avez besoin pour passer le moteur:
Alternative à l'appel de
cls.__table__.drop(your_engine)
vous pouvez essayer ceci:Cette méthode ainsi que la create_all() la méthode accepte un argument optionnel "tables", qui prend un itérateur de sqlalchemy.sql.schéma.Des instances de Table.
Vous pouvez contrôler les tables à être créées ou supprimées de cette façon.
Ci-dessous est un exemple de code que vous pouvez exécuter dans iPython pour tester la création et la suppression d'une table sur Postgres
Vous pouvez également afficher un aperçu de mon article sur WordPress, avec ce même exemple et captures d'écran: oscarvalles.wordpress.com (recherche de SQL Alchimie).