gpt4 book ai didi

python - 为什么 SQLAlchemy 插入表达式 value() 方法在执行一个或两个语句时功能不同?

转载 作者:行者123 更新时间:2023-12-01 05:31:58 28 4
gpt4 key购买 nike

我正在学习 SQLAlchemy 核心教程 ( http://docs.sqlalchemy.org/en/rel_0_8/core/tutorial.html ),并发现了一个奇怪的行为。在“插入表达式”部分,他们首先创建一个基本插入表达式并打印它。

>>> ins = users.insert()
>>> str(ins)
'INSERT INTO users (id, name, fullname) VALUES (:id, :name, :fullname)'

然后,它们执行相同的操作,将值添加到特定列,这将表达式中的列数限制为 values() 中列出的列数。打电话。

>>> ins = users.insert().values(name='jack', fullname='Jack Jones')
>>> str(ins)
'INSERT INTO users (name, fullname) VALUES (:name, :fullname)'

为什么如果我采用第二个版本并用 2 行而不是 1 行执行它,values()电话打不通?

>>> ins = users.insert()
>>> ins.values(name='jack', fullname='Jack Jones')
>>> str(ins)
'INSERT INTO users (id, name, fullname) VALUES (:id, :name, :fullname)'

我知道values()调用确实没有做任何事情,因为我测试了 params来自 ins.compile().params 的值打电话,他们都是 None在 2 行版本中。

>>> ins = users.insert().values(name='jack', fullname='Jack Jones')
>>> ins.compile().params
{'fullname': 'Jack Jones', 'name': 'jack'}

>>> ins = users.insert()
>>> ins.values(name='jack', fullname='Jack Jones')
>>> ins.compile().params
{'fullname': None, 'password': None, 'id': None, 'name': None}

最佳答案

两者的区别:

>>> ins = users.insert().values(name='jack', fullname='Jack Jones')
>>> ins.compile().params
{'fullname': 'Jack Jones', 'name': 'jack'}

>>> ins = users.insert()
>>> ins.values(name='jack', fullname='Jack Jones')
>>> ins.compile().params
{'fullname': None, 'password': None, 'id': None, 'name': None}

是您在第二种情况下没有保存 ins 的返回值。我还没有测试过,但为了使它们等效,应该是这样的:

>>> ins = users.insert()
>>> ins = ins.values(name='jack', fullname='Jack Jones')

否则,您对 ins.values 所做的事情就会消失

关于python - 为什么 SQLAlchemy 插入表达式 value() 方法在执行一个或两个语句时功能不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20025324/

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