[解決済み] sqlalchemyのモデルで定義されたカラムを反復処理する方法?
2022-10-14 10:13:42
質問
SQLAlchemyのモデルで定義されたカラムのリストに対して反復処理を行う方法を考えています。いくつかのモデルにシリアライズとコピーメソッドを書くために必要です。ただ単に
obj.__dict__
には、SA 固有の項目がたくさん含まれているので、単純に反復処理することはできません。
どなたか
id
と
desc
の名前は、次の中から選びますか?
class JobStatus(Base):
__tablename__ = 'jobstatus'
id = Column(Integer, primary_key=True)
desc = Column(Unicode(20))
この小さなケースでは、私は簡単に作成することができました。
def logme(self):
return {'id': self.id, 'desc': self.desc}
を自動生成してくれるようなものがいいのですが
dict
(を自動生成するようなものを希望します(大きなオブジェクトの場合)。
どのように解決するのですか?
以下のような関数を使用するとよいでしょう。
def __unicode__(self):
return "[%s(%s)]" % (self.__class__.__name__, ', '.join('%s=%s' % (k, self.__dict__[k]) for k in sorted(self.__dict__) if '_sa_' != k[:4]))
これは、SAを除外する マジック 属性は除外しますが、リレーションは除外しません。そのため、基本的には依存関係、親、子などを読み込む可能性がありますが、これは絶対に望ましいことではありません。
しかし、実際にはもっと簡単です。
Base
を継承すると
__table__
属性があるため、できるようになります。
for c in JobStatus.__table__.columns:
print c
for c in JobStatus.__table__.foreign_keys:
print c
参照 SQLAlchemy のマップされたオブジェクトからテーブルのプロパティを見つける方法 - のような質問を参照してください。
マイクによる編集。 のような機能をご覧ください。 マッパー.c と Mapper.mapped_table . 0.8 以降を使用している場合は Mapper.attrs と関連する関数も参照してください。
の例 Mapper.attrs :
from sqlalchemy import inspect
mapper = inspect(JobStatus)
for column in mapper.attrs:
print column.key
関連
-
[解決済み] 値が多すぎて展開できない」、dictを反復する。 key=>string, value=>list
-
[解決済み] 辞書を繰り返しながら、辞書の項目を削除するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】sqlalchemy 複数のカラムにまたがる一意性
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] virtualenvsはどこに作成するのですか?
最新
-
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でファイルのMD5チェックサムを計算するには?重複
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例