Ich möchte eine Tabelle mit SQLAlchemy löschen.Wie lösche ich eine Tabelle in SQLAlchemy?
Da ich immer und immer wieder teste, möchte ich die Tabelle my_users
löschen, damit ich jedes Mal von vorne anfangen kann.
Bisher habe ich SQLAlchemy bin mit roher SQL durch die engine.execute() Methode auszuführen:
sql = text('DROP TABLE IF EXISTS my_users;')
result = engine.execute(sql)
Allerdings frage ich mich, ob es eine standardisierte Möglichkeit, dies zu tun. Die einzigen, die ich finden konnte, ist drop_all()
, aber es löscht alle die Struktur, die nicht nur eine bestimmte Tabelle:
Base.metadata.drop_all(engine) # all tables are deleted
Zum Beispiel dieses sehr einfache Beispiel gegeben. Es besteht aus einer SQLite-Infrastruktur mit einer einzigen Tabelle my_users
, in der ich einige Inhalte hinzufüge.
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)
Für diesen speziellen Fall drop_all()
funktionieren würde, aber es wird von dem Moment nicht bequem sein, die ich mehr als eine Tabelle beginnen mit und ich mag die andere halten.
Interessant! Wenn ich jedoch eine 'User .__ Tabelle __. Drop()' hinzufüge, bekomme ich einen Fehler: 'sqlalchemy.exc.UnboundExecutionError: Das Tabellenobjekt 'my_users' ist nicht an eine Engine oder Verbindung gebunden. Die Ausführung kann nicht ohne die Ausführung einer Datenbank fortgesetzt werden. Es sieht vernünftig aus, aber ich weiß nicht, wie ich die Engine oder die Sitzung dafür verwenden soll. – fedorqui
@fedorqui Versuchen Sie, übergeben Sie die Engine als Argument zu fallen(), und lassen Sie mich wissen – daveoncode
Oh Mann 'User .__ Tabelle __. Drop (Engine)' machte es, vielen Dank! – fedorqui