2011-06-29 3 views
0

カラムがTS_TEST_IDのテーブルがあります。私は、次のプロパティを持つSQLAlchemyのモデルを持っている:SQLAlchemy - プロパティ名ではなく、データベースの列名を使用してモデルの値を設定します。

id = Column(u'TS_TEST_ID', INTEGER(), primary_key=True, nullable=False) 

TS_TEST_IDが知られているとき、私のモデルクラスのインスタンスでidを設定する方法はありますか?つまり、私はデータベース内の列の名前しか知りません。何とかそれをidにマップし、私のモデルのidプロパティを設定したいと思います。私はちょうどMyModel(**{'TS_TEST_ID':1})を行うことは働くだろう期待していたが、私は次のエラーを取得する:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 4, in __init__ 
    File "C:\Python26\lib\site-packages\sqlalchemy\orm\state.py", line 111, 
    in initialize_instance 
    return manager.events.original_init(*mixed[1:], **kwargs) 
    File "C:\Python26\lib\site-packages\sqlalchemy\ext\declarative.py", line 1377, 
    in _declarative_constructor 
    (k, cls_.__name__)) 
TypeError: 'TS_TEST_ID' is an invalid keyword argument for MyModel 

私はむしろどちらか、私のモデルでは、すべての列にTS_TEST_ID = Column(u'TS_TEST_ID', INTEGER(), primary_key=True, nullable=False)を定義する必要がない、またはidを返しTS_TEST_IDと呼ばれるにも方法でしょうプロパティ。

+1

それは何も確認できないので、野生の推測です: 'yourobj.c.TS_TEST_ID = 15'はそのトリックをしますか? –

+0

'MyModel'のインスタンスは' c'プロパティを持っていませんが、私は 'myobj .__ mapper __。c'を通して同じことにアクセスでき、' myobj .__ mapper __。c.TS_TEST_ID'にアクセスしようとしています'AttributeError'で失敗します。 –

答えて

0

これは、必要以上に複雑に見えますが、機能します。私は私が使用しているfind方法がCleanest Python find-in-list functionからである

@staticmethod 
def fromFieldHash(h): 
    row = MyModel() 
    cols = list(row.__table__._columns) 
    for k, v in h.iteritems(): 
     col = find(lambda c: c.key == k, cols) 
     # See http://www.sqlalchemy.org/trac/wiki/06Migration#AnImportantExpressionLanguageGotcha 
     if col is not None: 
      prop = row.__mapper__._columntoproperty[col].key 
      setattr(row, prop, v) 
    return row 

...これを行うためのより直接的な方法があります願っています。

関連する問題