SQLAlchemyを使用してテーブルを削除します。SQLAlchemyでテーブルを削除するには?
何度も何度も試していますので、テーブルmy_users
を削除して、毎回ゼロから始めることができます。これまでのところ、私はengine.execute()メソッドを介して生のSQLを実行するためのSQLAlchemyのを使用しています
:そうするためのいくつかの標準的な方法があるかどう
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'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)
、drop_all()
は動作しますが、それは私が複数のテーブルを持ち始めると、私は他のものを維持したい瞬間から、便利ではありません。
興味深い!しかし、 'User .__ table __。drop()'を追加すると、エラーが発生します。 'sqlalchemy.exc.UnboundExecutionError:テーブルオブジェクト 'my_users'がエンジンまたは接続にバインドされていません。実行するデータベースがなければ実行できません。それは合理的だと思うが、私はこれを行うためにエンジンやセッションを使用する方法を知らない。 – fedorqui
@fedorqui drop()の引数としてエンジンを渡してみてください。 – daveoncode
ああ男 'User .__ table __。drop(engine)'それを作った、多くの感謝! – fedorqui