首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sqlalchemy更新一个特定的列元素,值在哪里?

sqlalchemy更新一个特定的列元素,值在哪里?
EN

Stack Overflow用户
提问于 2018-05-26 01:12:53
回答 1查看 652关注 0票数 0

我有一个sqlite db,创建如下:

代码语言:javascript
复制
class VPN_routers(Base):
    __tablename__ = 'vpnrouters'
    __table_args__ = TABLE_ARGS
    sp_id = Column(String(), primary_key=True)
    router_id = Column(String())
    external_gw = Column(String())
    subnet_attached = Column(String())
    vpn_connectivity = Column(String()

表中内容如下:

代码语言:javascript
复制
sp-10.1.10.148|66c49f9b-11c4-4|172.24.4.6|cb3a722e-2ec4-4caf-a34b-93004d885f28|NO
sp-10.1.10.147|282608ba-8870-l|172.24.4.7|Not Attached|NO
sp-10.1.10.149|44cc77fe-3b2e-4|172.24.4.7|50853e0b-918f-4c5f-8188-3acbb23a829a|NO

我想要更新sp_id=为“sp-10.1.10.147”(使用sp_id进行标识)的行,并将subnet_id和vpn_connectivity更新为新值。更新后的表可能是这样的。

代码语言:javascript
复制
sp-10.1.10.148|66c49f9b-11c4-4|172.24.4.6|cb3a722e-2ec4-4caf-a34b-93004d885f28|NO
sp-10.1.10.147|282608ba-8870-l|172.24.4.7|cbcbeiowj-d34f5tgygt-6g7ggrydwqrer3d|YES
sp-10.1.10.149|44cc77fe-3b2e-4|172.24.4.7|50853e0b-918f-4c5f-8188-3acbb23a829a|NO

我试图将这个更新写成一个函数,在这个函数中,我可以将任何值作为行的标识符(不一定是sp_id always),并将其相应的列的新元素作为函数的输入。

例如:

代码语言:javascript
复制
update_DB(VPN_routers, identifier={'sp_id':"sp-10.1.10.147"}, changes={'subnet_attached': "cbcbeiowj-d34f5tgygt-6g7ggrydwqrer3d", 'vpn_connectivity':"YES"})

*注意:标识符和更改并不总是相同的,标识符的长度固定为1,但更改的长度可能是可变的。

我尝试了很多方法,但我不能做到,完全依赖于这篇文章的答案。

EN

回答 1

Stack Overflow用户

发布于 2018-05-26 02:31:09

“标识符”很容易处理:只需使用Query.filter_by()unpack the given dictionary as keyword arguments

由于Query.update()接受以属性名作为键的字典,因此处理更改就像向前传递字典一样简单:

代码语言:javascript
复制
def update_DB(cls, identifier, changes):
    session.query(cls).\
        filter_by(**identifier).\
        update(changes, synchronize_session=False)

只要两个字典都使用属性名作为键,它就可以工作,但是您的示例包含"subnet_id“作为键,它不是映射类的属性。也许它应该是"subnet_attached“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50534036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档