sqlalchemy:column_prefix导致访问模型属性的问题

时间:2013-03-18 15:03:12

标签: python sqlalchemy

我搜索w / o结果以获取整数值或通过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 个答案:

答案 0 :(得分:1)

根据文件Naming All Columns with a Prefix

  

...相对于映射属性名称的前缀   ()列名...

由于您在类中定义了映射属性,因此我认为它不符合您的要求。

解决方案-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)