gpt4 book ai didi

python - SQLalchemy,原始查询和参数

转载 作者:太空狗 更新时间:2023-10-29 20:42:08 25 4
gpt4 key购买 nike

我正在尝试使用 sqlalchemy 执行原始 sql 查询,并想知道什么是“正确”的方法。

我的查询如下所示(目前):

db.my_session.execute(
"""UPDATE client SET musicVol = {}, messageVol = {}""".format(
music_volume, message_volume))

我不喜欢的是字符串格式和缺少任何参数处理(你好,音乐音量中的引号:-D)。

我试图遵循这个答案:

How to execute raw SQL in SQLAlchemy-flask app

应用我阅读的内容后,我的代码片段如下所示:

db.my_session.execute(
"UPDATE client SET musicVol = :mv , messageVol = :ml", mv=music_volume, ml=message_volume)

但是我收到错误消息,mv 和 ml 不是可识别的参数。

如果我将我的代码片段改成这样,它就可以工作了:

db.my_session.execute(
"UPDATE client SET musicVol = :mv , messageVol = :ml", {mv: music_volume, ml: message_volume})

最后 my_session 在名为 db.py 的文件中启动:

engi = sqlalchemy.create_engine(
'mysql://{user}:{passwd}@{host}/{db}'.format(
host=settings.HOST,
user=settings.USER,
passwd=settings.PASS,
db=settings.DB_NAME), execution_options={
'autocommit': True,
})

my_session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(bind=engi), scopefunc=os.getpid)
sqlalchemy.orm.scoped_session.configure(my_session, autocommit=True)

我想知道的是为什么上面链接的答案和这部分文档:

http://docs.sqlalchemy.org/en/rel_0_9/core/tutorial.html#using-text

显示的解决方案与实际对我有用的解决方案略有不同。

另外,如果我的方法可行的话。

最佳答案

mvml 都不会被识别,因为您还没有将它们定义为变量。

execute 语句的第二个参数是一个字典,您的普通查询 "UPDATE client SET musicVol = :mv , messageVol = :ml" 的所有元素都已转义正在本词典的键中搜索带冒号的。 execute 方法在此字典中未找到键 'mv''ml',因此会引发错误。

这是正确的版本:

db.my_session.execute(
"UPDATE client SET musicVol = :mv, messageVol = :ml",
{'mv': music_volume, 'ml': message_volume}
)

关于python - SQLalchemy,原始查询和参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29208847/

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