2016-08-08 47 views
0

Als Teil einer Plausibilitätsprüfung möchte ich prüfen, ob jede Spalte einen default Wert oder eine Funktion enthält. Wenn ich die Tabelle erstelle, kann ich auf diese Information durch table.columnsdefault Attribut zugreifen.Zugriff auf das `default` Attribut der Spalte nach der Reflektion

Im Moment benutze ich "reflection" um auf existierende Tabellen zuzugreifen bzw. diese wieder zu verbinden.

Wenn ich jedoch versuche, auf das Attribut default der Spalten zuzugreifen, wird das Attribut default nach der Verwendung der Reflexion auf None gesetzt.

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) 

Ausgang:

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

'default' ist der Python-Standard. Du willst 'server_default'. – univerio

+0

@univerio, Wenn Sie Ihren Kommentar in eine Antwort verwandeln, werde ich es akzeptieren. – Framester

Antwort

1

default ist der Python-Level-Standard. SQLAlchemy Reflection setzt die Datenbankspalte standardmäßig in server_default: