2013-03-18 69 views
0

我去尋找W/O結果的方式來獲得整數值或通過SQLAlchemy的創建對象模型布爾值,SQLAlchemy的:column_prefix導致問題訪問模型屬性

我的意思是我可以添加它,它工作完美無瑕,但我不能讓整數值或布爾值,我得到當我試圖打印它是對象名稱:

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:[email protected]/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 

我不能去PRI新臺幣的id值,貌似對象列在那裏,但它並沒有返回值加時賽財產

我甚至用

session.refresh(b) 

附加後,但結果是一樣的。

+0

你試過打印INT(b.id) – Tkingovr 2013-03-18 15:30:41

+0

這是我得到 - 類型錯誤:int()函數的參數必須是字符串或數字,而不是'列' – Freaktor 2013-03-18 15:36:28

+0

確定只是檢查 – Tkingovr 2013-03-18 15:36:57

回答

1

根據文檔Naming All Columns with a Prefix

...prefix to the mapped attribute names relative to the (table) column name ...

既然你定義在類的映射屬性,我不認爲它做你的願望。

解決方案-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) 
+0

謝謝我已經注意到它,但我不想回應自己。再次感謝你 – Freaktor 2013-03-19 16:15:30

+0

@Freaktor:謝謝,但是如果你找到了適合你的解決方案,你應該已經發布了它。這是鼓勵,並會幫助其他人。 – van 2013-03-19 19:32:54

+0

我沒有發佈它,因爲我不得不等待,當我回來(第二天)你發佈解決方案。 – Freaktor 2013-03-20 14:15:10