【发布时间】:2020-10-12 06:06:34
【问题描述】:
我有 3 张桌子:交易所、加密货币和交易。这些表是相关的:交易所可以有许多加密货币和许多交易。当我只有一段关系时,一切正常。在我添加交易表后,我遇到了很多错误。我使用 Flask SQLAlchemy 和 Marshmallow
交换模式:
class ExchangeModel(db.Model):
__tablename__ = 'exchanges'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False, unique=True)
amount = db.Column(db.Float(precision=2), default=0)
currency = db.Column(db.String(10), nullable=False)
cryptocurrencies = db.relationship('CryptocurrencyModel', lazy="dynamic" )
trades = db.relationship('TradeModel')
交换架构
from ma import ma
from schemas.trade import TradeSchema
from schemas.cryptocurrency import CryptocurrencySchema
from models.trade import TradeModel
from models.cryptocurrency import CryptocurrencyModel
from models.exchange import ExchangeModel
class ExchangeSchema(ma.SQLAlchemyAutoSchema):
trades = ma.Nested(TradeSchema, many=True)
cryptocurrencies = ma.Nested(CryptocurrencySchema, many=True)
class Meta:
model = ExchangeModel
dump_only = ("id","amount")
load_instance = True
加密货币模型:
class CryptocurrencyModel(db.Model):
__tablename__ = 'cryptocurrencies'
id = db.Column(db.Integer, primary_key=True)
amount = db.Column(db.Float(precision=5), default=0)
rate = db.Column(db.Float(precision=5), nullable=False)
shortcut = db.Column(db.String(10), nullable=False)
exchange_id = db.Column(db.Integer, db.ForeignKey('exchanges.id'), nullable=False)
exchange = db.relationship('ExchangeModel')
加密货币架构:
from ma import ma
from models.cryptocurrency import CryptocurrencyModel
from models.exchange import ExchangeModel
from marshmallow import Schema, fields, validate
class CryptocurrencySchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = CryptocurrencyModel
dump_only = ("id","amount")
load_instance = True
include_fk = True
shortcut = fields.Str(required=True, validate=[validate.Length(min=3)])
贸易模型:
class TradeModel(db.Model):
__tablename__ = 'trades'
id = db.Column(db.Integer, primary_key=True)
amount = db.Column(db.Float(precision=5), nullable=False)
currency_in = db.Column(db.String(10), nullable=False)
currency_out = db.Column(db.String(10), nullable=False)
created_date =
db.Column(db.DateTime(timezone=True),server_default=db.func.current_timestamp())
exchange_id = db.Column(db.Integer, db.ForeignKey('exchanges.id'), nullable=False)
exchange = db.relationship('ExchangeModel')
交易模式:
from ma import ma
from models.trade import TradeModel
from models.exchange import ExchangeModel
class TradeSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = TradeModel
dump_only = ("id", "amount", 'created_date')
load_instance = True
include_fk = True
错误是:
InvalidRequestError:初始化映射器映射类 ExchangeModel->exchanges 时,表达式“CryptocurrencyModel”未能找到名称(“CryptocurrencyModel”)。如果这是一个类名,请考虑在定义了两个依赖类之后将此 relationship() 添加到
类中。
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy marshmallow