sqlalchemy:column_prefix导致访问模型属性时出现问题
我在网上找了很多方法,但还是没找到怎么从通过sqlalchemy创建的对象模型中获取整数值或布尔值。
我可以添加这些值,而且运行得很好,但我就是无法获取整数值或布尔值。当我尝试打印时,只能看到对象的名称:
from sqlalchemy import create_engine, MetaData, Table, Column,Integer,String,Boolean,Sequence
from sqlalchemy.orm import mapper, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import json
class Bookmarks(object):
pass
#----------------------------------------------------------------------
engine = create_engine('postgresql://u:p@localghost/asd', echo=True)
Base = declarative_base()
class Tramo(Base):
__tablename__ = 'tramos'
__mapper_args__ = {'column_prefix':'tramos'}
id = Column(Integer, primary_key=True)
nombre = Column(String)
tramo_data = Column(String)
estado = Column(Boolean,default=True)
def __init__(self,nombre,tramo_data):
self.nombre=nombre
self.tramo_data=tramo_data
def __repr__(self):
return "[id:%s][nombre:%s][tramo:%s]" % (getattr(self, 'id'), self.nombre,self.tramo_data)
Session = sessionmaker(bind=engine)
session = Session()
tabla = Tramo.__table__
metadata = Base.metadata
metadata.create_all(engine)
b=Tramo('tramo1','adadas')
session.add(b)
session.commit()
print b
print b.id
它打印的是
[id:tramos.id][nombre:tramo1][tramo:adadas]
tramos.id
我无法打印出id值,虽然看起来对象的列在里面,但它并没有返回属性的值。
我甚至在添加之后使用了
session.refresh(b)
但结果还是一样。
1 个回答
1
根据文档中的说明,给所有列加前缀:
...前缀是相对于映射属性名称和(表)列名称的...
因为你是在你的类里定义映射属性,所以我觉得这可能不是你想要的效果。
解决方案1:把 'column_prefix':'tramos'
从你的 __mapper_args__
中去掉。
解决方案2:使用 print b.tramosid
可以打印出它的 ID。你需要相应地修改 __repr__
方法:
def __repr__(self):
return "[id:%s][nombre:%s][tramo:%s]" % (getattr(self, 'tramosid'), self.nombre, self.tramo_data)