2012-11-14 20 views
9

SQLAlchemy Bildirgesinde, geçici veya bekleyen nesne örneklerinin varsayılan değerlere sahip olacak şekilde sütunlar için varsayılan değerleri nasıl ayarlayabilirim? Kısa bir örnek:Nitelik varsayılan değerlerini sqlalchemy bildirgesinde nasıl belirlerim?

from sqlalchemy import Column, Integer, String 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class A(Base): 
    __tablename__ = "A" 
    id = Column(Integer, primary_key=True) 
    word = Column(String, default="adefault") 

a = A() 
print a.word 

safça, bu çıktısı adefault olması beklenebilir. Tabii ki, çıkış aslında None. Bir oturuma eklerken bile, None kalır ve yalnızca oturumu imzalarken (veya temizlediğimde) doldurulur ve örnek değerini veritabanından yeniden okur.

Örneği veritabanına atmadan bir öznitelik varsayılanı ayarlamak için herhangi bir yolu var mı? ColumnDefault belgelerini araştırmayı denedim ve tür/python değerini denetlemek için özel bir belirteç kategorisinde el ile ayarlamak için açık bir yol yok gibi görünüyor.

+0

Ayrıca bkz: https://stackoverflow.com/q/14002631/6646912 – krassowski

cevap

10

Sınıfınıza bir kurucu ekleyin ve orada varsayılan değeri ayarlayın. Satırlar veritabanından yüklendiğinde, kurucu çalışmaz, bu yüzden bunu yapmak iyi olur.

class A(Base): 
    __tablename__ = "A" 
    id = Column(Integer, primary_key=True) 
    word = Column(String) 

    def __init__(self): 
     self.word = "adefault" 

a = A() 
print a.word 

SA Docs benzer yollarla __init__ kullanmanın örnekleri vardır.

+0

Bir "A" örneğinin "word" için bir değere sahip olduğunu garanti etmek isterseniz, yapıcı varsayılan değerden daha iyi görünür. sütun tanımı. Her iki yerde de varsayılan olarak belirtmeniz gereken bir durum var mı? –

+2

Cevap, benim için hiç işe yaramıyor. Hiçbiri basmaz ve __init__ asla çağrılmaz. – user202987

+0

Görünmez tabandaki '__init__', gerçek model sınıfları için çağrılmıyor. – Rob