2016-08-08 1 views
0

サニティチェックの一環として、各カラムにdefault値または機能があるかどうかをチェックしたいと思います。テーブルを作成すると、table.columnsdefaultという属性からアクセスできます。リフレクション後のカラムの `default`属性へのアクセス

現時点では、「リフレクション」を使用して既存のテーブルにアクセス/再接続します。

しかし、列のdefault属性にアクセスしようとすると、反射を使用した後にdefault属性がNoneに設定されます。

from sqlalchemy import Table, Column, Integer, MetaData, create_engine 
engine = create_engine(postgresql+psycopg2://XXX) 
metadata = MetaData(engine) 

table_name ='test' 
table = Table(table_name, metadata, 
Column('id', Integer, primary_key=True), 
Column('value', Integer, default=42)) 
table.create(engine) 
for c in table.columns: 
    print c.name, repr(c.default) 

print '`reattaching using reflection`' 
metadata = MetaData(engine) 
metadata.reflect() 
table_reloaded = metadata.tables[table_name] 
for c in table_reloaded.columns: 
    print c.name, repr(c.default) 

出力:

id None 
value ColumnDefault(42) 
`reattaching using reflection` 
id None 
value None 
+2

'default'はPythonのデフォルトです。 'server_default'が必要です。 – univerio

+0

@univerio、あなたのコメントを回答にすると、私はそれを受け入れます。 – Framester

答えて

1

defaultは、Pythonレベルのデフォルトです。 SQLAlchemy reflectionはデータベースカラムをデフォルトでserver_defaultに置きます。

for c in table_reloaded.columns: 
    print c.name, repr(c.server_default) 
関連する問題