标签: marshmallow-sqlalchemy

更新到 3.5.0 marshmallow 后出现“未知字段”

更新了我的项目中的依赖项

marshmallow-sqlalchemy==0.17.0
marshmallow==3.0.0b6
Run Code Online (Sandbox Code Playgroud)

marshmallow-sqlalchemy==0.21.0
marshmallow==3.5.0
Run Code Online (Sandbox Code Playgroud)

我有这样一个模型(简化):

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class MyModel(Base):
    __tablename__ = 'my_model'

    id = Column(BigInteger, primary_key=True)
    field_name = Column(String)
    password = Column(String)
Run Code Online (Sandbox Code Playgroud)

架构

from marshmallow import fields
from marshmallow_sqlalchemy import (
    ModelSchema,
    field_for,
)
class RegistrarSchema(ModelSchema):
    class Meta:
        model = MyModel

    other_field_name = fields.Function(lambda obj: obj.field_name)
    field_name = field_for(MyModel, 'field_name', load_from='other_field_name')

    password = fields.Method("get_password")

    def get_password(self, obj):
        return decrypt_password(obj)

    def load(self, data, session=None, instance=None, transient=False, *args, **kwargs):
        if …
Run Code Online (Sandbox Code Playgroud)

python marshmallow marshmallow-sqlalchemy

8
推荐指数
1
解决办法
1万
查看次数

sqlalchemy.orm.exc.UnmappedInstanceError:类'builtins.dict'未映射

我正在尝试使用 SQLAlchemy 和 Marshmallow 将新用户插入到数据库中。该user参数是从 API 端点接收的。一切正常,直到我到达create函数中的这一行:

db.session.add(new_user)
Run Code Online (Sandbox Code Playgroud)

此时new_user变量的值是:

{'password': 'string', 'email': 'fave@string', 'username': 'string'}
Run Code Online (Sandbox Code Playgroud)

功能:

def create(user):
    uname = user.get('username')
    email = user.get('email')
    password = user.get ('password')

    existing_username = User.query.filter(User.username == uname).one_or_none()

    if existing_username is None:

        schema = UserSchema()
        new_user = schema.load(user, session=db.session)

        db.session.add(new_user) <- It fails here
        db.session.commit()

        return schema.dump(new_user), 201
Run Code Online (Sandbox Code Playgroud)

楷模:

    class User (db.Model):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(20), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
        profile_picture = db.Column(db.String(20), …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy flask-marshmallow marshmallow-sqlalchemy

2
推荐指数
1
解决办法
5453
查看次数

SQLAlchemy 问题 - Marshmallow 嵌套对象推断外键

我试图让 Marshmallow-SQLAlchemy 反序列化具有嵌套对象的对象,而不指定嵌套对象的外键(应该是父对象的主键)。这是一个独立的示例:

# Python version == 3.8.2
from datetime import datetime
import re

# SQLAlchemy == 1.3.23
from sqlalchemy import func, create_engine, Column, ForeignKey, Text, DateTime
from sqlalchemy.ext.declarative import as_declarative, declared_attr
from sqlalchemy.orm import relationship, sessionmaker

# marshmallow==3.10.0
# marshmallow-sqlalchemy==0.24.2
from marshmallow import fields
from marshmallow.fields import Nested
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema

################################################################################
# Set up
################################################################################

engine = create_engine("sqlite:///test.db")

Session = sessionmaker()
Session.configure(bind=engine)
session = Session()


################################################################################
# Models
################################################################################

@as_declarative()
class Base(object):

    @declared_attr
    def __tablename__(cls):
        # From …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy marshmallow marshmallow-sqlalchemy

1
推荐指数
1
解决办法
1947
查看次数