Python - maximo de un vector

 
Vista:
sin imagen de perfil

maximo de un vector

Publicado por John (1 intervención) el 17/02/2016 13:58:18
Hola !

Me estoy iniciando en código Python y sqlalchemy.

He creado el siguiente programa que construye una base de datos en la que guarda los salarios de ciertos usuarios. Estoy intentando crear una propiedad híbrida que me haye, por ejemplo, la suma de los salarios de cada usuario y los guarde en una nueva columna:


Primero cargamos los paquetes necesarios:
1
2
3
4
5
6
7
8
from sqlalchemy import select, create_engine, ForeignKey, Date, Time, \
PrimaryKeyConstraint, UniqueConstraint, and_
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float, Date, func
from sqlalchemy.orm import sessionmaker, relationship, backref, \
column_property, object_session
from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method
import datetime

Creamos la base:
1
2
3
fich = 'sqlite:///prueba.sqlite'
engine = create_engine(fich, echo=False)
Base = declarative_base()
Mi problema está en las filas 16 y 17, ¿qué es lo que falla?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(100), nullable=False)
    total = Column(Integer)
 
    accounts = relationship("SavingsAccount", backref="owner")
 
    def __init__(self, name):
        self.name = name
 
    def __repr__(self):
        return "<User(name ='%s')>" % str(self.name)
 
    @hybrid_property
 
    def total(self):
        return sum(self.accounts)
 
class SavingsAccount(Base):
    __tablename__ = 'account'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('user.id'), nullable=False)
    balance = Column(Integer)
    def __init__(self, user_id, balance):
        self.user_id = user_id
        self.balance = balance
    def __repr__(self):
        return "<SavingsAccount(user_id ='%s', balance ='%s')>" % (str(self.user_id), str(self.balance))
1
2
3
Base.metadata.create_all(engine)
Session = sessionmaker(bind = engine)
session = Session()
Introducimos datos
1
2
3
4
5
6
usuario_1 = User(name = "Dave")
usuario_1.accounts.append(SavingsAccount(user_id = 1, balance = 1200))
usuario_1.accounts.append(SavingsAccount(user_id = 1, balance = 2000))
usuario_2 = User(name = "John")
usuario_2.accounts.append(SavingsAccount(user_id = 2, balance = 1200))
usuario_2.accounts.append(SavingsAccount(user_id = 2, balance = 2100))
Añadimos los datos a la sesión
1
2
3
session.add(usuario_1)
session.add(usuario_2)
session.commit()
Cuando ejecuto el siguiente comando me da error:
1
usuario_1.total

Alguna idea de qué está ocurriendo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder