Je commence à avoir des problèmes avec les attributs de classe python et les attributs de données dans mon modèle sqlalchemy. Ce petit exemple pour illustrer ce qui se passe:Attributs de données python dans le modèle sqlalchemy
# -*- 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()
que les erreurs de code, car lorsque les objets sont pris de la DB __init__
ne fonctionne pas si data_attribute
n'existe pas. Si je mets data_attribute
avec les objets Column
devient un attribut de classe (je pense) et porte donc la même valeur pour toutes les instances de User
. Ce n'est pas ce que je veux.
Que dois-je faire pour avoir un attribut de données sur mon objet Utilisateur qui ne provient pas de la base de données mais est également unique pour chaque instance de User
?
Éditer: Je devrais probablement souligner que data_attribute
ne sera pas toujours juste une simple chaîne définie dans __init__
- c'est juste pour démontrer le problème.
légende. merci beaucoup – OrganicPanda
Le lien est 404 maintenant. – AlexLordThorsen
@AlexLordThorsen Le poste a été édité avec le lien fixe – modulitos