J'essaie d'utiliser @aggregated decorator de SQLAlchemy pour définir un attribut ('gross_amount)' pour une classe, Receipt. Cet attribut gross_amount
est la somme des instances Item.gross_amount
pour toutes les instances Item
associées à l'instance Receipt
par un ID étranger. I.E., un reçu est composé d'articles, et je veux définir une valeur de réception 'montant_brut' qui est juste le total de $ de tous les articles sur le reçu.Comment utiliser correctement le décorateur d'attribut de classe @aggregated de SQLAlchemy
J'ai calqué mon code après ce document http://sqlalchemy-utils.readthedocs.io/en/latest/aggregates.html
il semble donc comme ça ...
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy import orm
class Receipt(Base):
__tablename__ = "receipts"
__table_args__ = {'extend_existing': True}
id = Column(Integer, index = True, primary_key = True, nullable = False)
@aggregated('itemz', Column(Integer))
def gross_amount(self):
return func.sum(Item.gross_amount)
itemz = orm.relationship(
'Item',
backref='receipts'
)
class Item(Base):
__tablename__ = "items"
id = Column(Integer, index = True, primary_key = True, nullable = False)
'''
FE relevant
'''
gross_amount = Column(Integer)
receipt_id = Column(Integer, ForeignKey("receipts.id"), nullable=False)
Dans ma migration, je suis censé avoir une colonne dans la table receipts
pour gross_amount
? 1) Lorsque je DÉFINIE cette colonne dans la table receipts
, toute Receipt.gross_amount
pour n'importe quelle instance pointe juste vers les valeurs de gross_amount définies dans la table receipts
. 2) Quand je ne définissez pas cette colonne dans la table receipts
, je reçois une erreur SQLAlchemy chaque fois que j'exécute une SELECT
contre la base de données:
ProgrammingError: (psycopg2.ProgrammingError) column receipts.gross_amount does not exist
FWIW, mon paquet SQLAlchemy
est le dernier distribué à travers PIP. ..
SQLAlchemy==1.1.11
SQLAlchemy-Utils==0.32.14
Et mon db local sur lequel je suis en ce moment est pour PostgreSQL 9.6.2
Qu'est-ce que Je fais mal ici? Toute aide au patient serait grandement appréciée!
Ceci ne fournit pas de réponse à la question. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [De l'examen] (/ review/low-quality-posts/18633934) – thewaywewere