【发布时间】:2013-05-10 19:02:54
【问题描述】:
我有一个表“城市”定义为:
CREATE TABLE `City` (
`id` int(11) NOT NULL,
`lat` decimal(9,6) default NULL,
`long` decimal(9,6) default NULL,
`lm_index` int(11) default NULL,
`num_business` int(11) default NULL,
`postal_code` varchar(16) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我使用 python 和 SQLAlchemy 来映射这个表:
Base = declarative_base(engine)
class City(Base):
''''''
__tablename__ = 'City'
__table_args__ = {'autoload':True}
def __init__(self, id, lat, long, lm_index, numbiz, postal):
self.id = id
self.lat = lat
self.long = long
self.lm_index = lm_index
self.num_business = numbiz
self.postal_code = postal
如果我正确理解了 python 十进制包,这应该可以:
from decimal import *
getcontext().prec = 6
lat = 12.11111111
long = 46.2222222
city = City(1, Decimal(str(lat)), Decimal(str(long)), 0, 0, 0)
但是,当我不调用 Decimal() 时,我仍然会遇到同样的错误:
Warning: Data truncated for column 'lat' at row 1
我在这里做错了什么?
【问题讨论】:
-
只是好奇,为什么要覆盖
__init__()而不是使用sqlalchemy.types.DECIMAL?这样sqlalchemy处理一切。 -
我是 SQLAlchemy 新手,我见过的所有示例都覆盖了 init。我已经搜索了文档,但无法弄清楚如何按照您的建议进行操作。如果您能给我一个提示,我将不胜感激。
-
你看官方文档了吗?因为此页面上的第一个示例显示了我在说什么docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html
标签: python mysql sqlalchemy decimal