[解決済み] SQLAlchemy でテーブルを削除する方法は?
2022-02-05 07:55:22
質問内容
SQLAlchemyを使って、テーブルを削除したいのですが。
何度も何度もテストしているので、テーブルを削除したい。
my_users
毎回ゼロから始められるように。
今のところ、私は SQLAlchemy を使って、生の SQL を engine.execute() メソッドを使用します。
sql = text('DROP TABLE IF EXISTS my_users;')
result = engine.execute(sql)
しかし、何か標準的な方法はないものだろうか。私が見つけた唯一のものは
drop_all()
しかし、それは特定の1つのテーブルだけでなく、すべての構造を削除します。
Base.metadata.drop_all(engine) # all tables are deleted
例えば、この非常に基本的な例を考えてみましょう。これは、1つのテーブルを持つ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()
しかし、複数のテーブルを持つようになったとき、他のテーブルも残しておきたい場合には不便になります。
どのように解決するのですか?
を呼び出すだけです。
drop()
をテーブルオブジェクトに対して実行します。
から
ドキュメント
:
このテーブルに対してDROP文を発行し、接続のために指定されたConnectableを使用します。
あなたの場合、そうであるべきです。
User.__table__.drop()
というような例外が発生した場合。
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
エンジンに合格する必要があります。
User.__table__.drop(engine)
関連
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] 辞書から要素を削除する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり