sqlalchemy反射表和字符串字段默认值的问题
嗯,有没有什么原因让sa在数据库表结构中已经设置了默认值的varchar列上尝试添加None值呢?对于浮点数或整数,它就不会这样做(我是在用反射)。
所以当我尝试添加新行时,比如:
u = User()
u.foo = 'a'
u.bar = 'b'
sa会发出一个查询,其中有很多列被赋值为None,而数据库显然会拒绝这个操作,并且不会用默认值替代这些None。
2 个回答
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
0
我发现这是sa中的一个bug,这个问题只出现在字符串字段上,出于某种未知原因,它们没有获得server_default属性。我已经为此提交了一个工单。