gpt4 book ai didi

python - 在 sqlalchemy 映射类构造函数中忽略额外关键字的选项?

转载 作者:太空狗 更新时间:2023-10-29 22:29:43 26 4
gpt4 key购买 nike

在下面,我正在尝试从具有额外键的 python 字典中初始化一个 sqlalchemy 映射类。是否可以让映射类自动忽略额外的键而不是抛出错误?同样,如果键不存在,映射类可以有默认值吗?

from sqlalchemy import Column, Integer, String
class User(Base):
__tablename__ = 'users'

id = Column(Integer, primary_key=True)
name = Column(String)

这是初始化部分:

my_example_user = {'id'=1, 'name'='john', 'extra_key'= 1234}
User(**my_example_user)

抛出无效键错误

想法?

最佳答案

SQLAlchemy Mapper 对象有一个 attrs 属性,它是映射类字段名称的字典。

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import class_mapper
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class User(Base):
__tablename__ = 'user'

id = Column(Integer, primary_key=True)
name = Column(String)

user = {
'name': 'Eihli',
'skill': 11
}

user_mapper = class_mapper(User)
mapped_user = User(**user)
# Boom! TypeError: 'skill' is an invalid keyword argument for User

mapped_user = User(**{
k: v for k, v in user.items()
if k in user_mapper.attrs.keys()
})
# Success!

无需费心维护排除列表或使用 dict 或妨碍 super 调用。

如果您尝试使用嵌套数据生成模型,则必须采取一些不同的做法。否则你会得到一个“Unhashable type 'dict'”错误。

这是检查映射器并获取关系键的助手示例。

def from_json(model, data):
mapper = class_mapper(model)
keys = mapper.attrs.keys()
relationships = inspect(mapper).relationships
args = {k: v for k, v in data.items()
if k in keys and k not in relationships}
return model(**args)

关于python - 在 sqlalchemy 映射类构造函数中忽略额外关键字的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com