【发布时间】:2013-08-01 01:48:30
【问题描述】:
如何在 SQLAlchemy 中执行原始 SQL?
我有一个 Python Web 应用程序,它在烧瓶上运行并通过 SQLAlchemy 连接到数据库。
我需要一种方法来运行原始 SQL。该查询涉及多个表连接以及内联视图。
我试过了:
connection = db.session.connection()
connection.execute( <sql here> )
但我不断收到网关错误。
【问题讨论】:
-
我以前看过,但我找不到有关运行更新的教程。我也不想学习语法并隐藏一个相当长(大约 20 行)的 SQL 查询。
-
@MarkusUnterwaditzer 我曾经这么认为,但现在我强烈反对。原始的、经过适当参数化的 SQL 通常比一堆函数调用和生成它的对象更容易阅读和维护。它还为您提供了数据库的全部功能,而无需费力地让 ORM 生成正确的语法(如果可能的话)并防止 ORM 做意外的事情。你可能会问,“那为什么要使用 SQLAlchemy?”,而我唯一的答案是,“现有的应用程序使用它,而改变一切都太昂贵了。”
-
@jpmc26 更新了您的评论——作为 SQL 的爱好者,我很难接受将“数据库的密钥”交给不负责任的炼金术士的想法,并且倾向于支持ORM is an antipattern :) 话虽如此,我很想加速某些组件,例如用户注册/管理,以及生成带有按钮序列的表,我可以为其编写操作 + SQL。您是否遇到过一些对 ORM 怀疑论者友好且在 Python 框架中非常适合您的工具?
-
@jpmc26 您在 Python 框架中使用什么来仅使用 SQL 或与 C# Dapper 非常接近?我在 Python Web 框架中看到的所有内容都希望我使用 SQLAlchemy,而我不喜欢 ORM,如果我使用 ORM,它会非常少。
-
@johnny 我还没有机会亲自尝试,但原始数据库连接库可能就足够了。例如,psycopg2 有直接返回
namedtuple和dict的游标:initd.org/psycopg/docs/extras.html。
标签: python sql sqlalchemy flask flask-sqlalchemy