sqlalchemy问题,反射表和字符串字段的默认值

时间:2010-01-10 12:28:39

标签: python sqlalchemy

嗯,是否有任何理由为sa尝试为在数据库模式中设置默认值的varchar列添加Nones?,它不会为浮点数或整数(使用反射)执行此操作。

所以当我尝试添加新行时: 喜欢 你=用户() u.foo ='a' u.bar ='b'

sa发出一个查询,其中包含很多cols,并且没有赋值给那些值,而db显然是吟游诗人并且没有执行默认替换。

2 个答案:

答案 0 :(得分:2)

您使用的是什么版本?实际代码是什么?下面的示例代码显示server_default参数适用于字符串字段:

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

metadata = MetaData()
Base = declarative_base(metadata=metadata)

class Item(Base):
    __tablename__="items"
    id = Column(String, primary_key=True)
    int_val = Column(Integer, nullable=False, server_default='123')
    str_val = Column(String, nullable=False, server_default='abc')

engine = create_engine('sqlite://', echo=True)
metadata.create_all(engine)
session = sessionmaker(engine)()

item = Item(id='foo')
session.add(item)
session.commit()
print item.int_val, item.str_val

输出结果为:

<...>
<...> INSERT INTO items (id) VALUES (?)
<...> ['foo']
<...>
123 abc

答案 1 :(得分:0)

我在sa中发现了它的一个错误,这只发生在字符串字段中,由于某些不明原因它们没有得到server_default属性,已经为此提交了一张票