如何在SQLAlchemy模型中为列生成不同的默认值?在以下示例中,我为模型对象的每个新实例获取相同的默认值。
import random, string
def randomword():
length = 10
return ''.join(random.choice(string.lowercase) for i in range(length))
class ModelFoo(AppBase):
temp = Column("temp", String, default=randomword())
答案 0 :(得分:2)
default=randomword()
错了。由于函数已经调用成为常量,因此它不再是函数。如果要在每次执行时获得不同的值,则传递可调用函数:
import random, string
from sqlalchemy import create_engine, Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
engine = create_engine('sqlite:///foo.db')
Session = sessionmaker(bind=engine)
sess = Session()
def randomword():
return ''.join(random.choice(string.lowercase) for i in xrange(10))
class Foo(Base):
__tablename__ = 'foo'
key = Column(String, primary_key=True, default=randomword)
Base.metadata.create_all(engine)
演示:
>>> sess.add(Foo())
>>> sess.add(Foo())
>>> sess.add(Foo())
>>> sess.flush()
>>> [foo.key for foo in sess.query(Foo)]
[u'aerpkwsaqx', u'cxnjlgrshh', u'dszcgrbfxn']
答案 1 :(得分:0)
默认= randomword将解决问题。
对你来说没用,但是还有另一个名为'server_default'的默认值,它位于数据库中。因此,即使您手动插入行,也会应用“server_default”。