0

データを挿入することになっている多くの列を持ついくつかのテーブルがあります。「SQLAlchemyClassDefination」ですでに列を入力しているので、列の名前を再入力したくありません。

投稿された他の質問から、以下のコードで列の名前を取得できるようです。

for c in datatable.__table__.columns.keys():
    print(c)

これにより、列名がわかります。ただし、必要なのは、列名を読み取るだけでなく、列にデータを挿入することです。以下は私が試したものです。

for_counter = 0
for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2): 
    instance.__table__.columns.keys()[(for_counter)] = "texttoinsert"
    for_counter += 1

これで列に「インデックスを付ける」ことができると思いましたが、コードを実行してデータベースを確認すると、自動インクリメントの「ID」列とデフォルトに設定されている日付のみがデータを取得します。「インスタンス」の他のすべての列はデータを取得しませんが、列に「texttoinsert」が見つかると予想していました。

基本的に、テーブルの名前を指定している限り、列インデックスを「使用して」データを挿入する関数を1つだけ作成したいと思います。これを達成する方法はありますか?

4

1 に答える 1

1

The for loop is replacing the values in the instance.__table__.columns.keys() array instead of setting the corresponding attribute on instance. This should do the trick:

for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2): 
  for colname in instance.__table__.columns.keys():
    setattr(instance, colname, 'text_to_insert')

As a side note, since all your instances have the same keys, inverting the two loops would lead to better performance (you don't need to recreate the keys array every time).

于 2013-02-23T14:04:20.217 に答える