我在我的sqlalchemy模型中使用python類屬性和數據屬性來解決問題。這是一個小例子來說明發生了什麼事:因爲sqlalchemy模型中的python數據屬性
# -*- coding: utf-8 -*-
import cherrypy
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql://USER:[email protected]/SCHEMA?charset=utf8', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
username = Column(String, nullable=False)
name = Column(String, nullable=False)
email = Column(String, nullable=False)
def __init__(self, username, name, email):
self.username = username
self.name = name
self.email = email
self.data_attribute = "my data attribute"
print "__init__"
def __repr__(self):
print "__repr__"
return "<User('%s','%s', '%s')>" % (self.username, self.name, self.email)
class Root(object):
@cherrypy.expose
def test(self):
our_user = session.query(User).one()
return our_user.data_attribute #error
if __name__ == '__main__':
cherrypy.tree.mount(Root())
cherrypy.server.quickstart()
cherrypy.engine.start()
該代碼的錯誤時,對象從DB __init__
採取不跑那麼data_attribute
不存在。如果我把data_attribute
與Column
對象變成一個類屬性(我認爲),因此它對User
的所有實例都具有相同的值。這不是我想要的。
如果我的用戶對象上的數據屬性不是來自數據庫,而且對於User
的每個實例都是唯一的,我需要做些什麼?
編輯:我應該指出,data_attribute
不會總是隻是一個簡單的字符串設置在__init__
- 這只是爲了演示問題。
傳說。非常感謝你 – OrganicPanda 2010-08-08 10:18:56
鏈接現在404。 – AlexLordThorsen 2014-11-05 05:23:07
@AlexLordThorsen該帖子已經使用固定鏈接編輯 – modulitos 2016-10-22 02:02:40