You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Flask项目中创建的SQLAlchemy db对象获取cursor?

从Flask-SQLAlchemy的db对象获取Cursor的方法

嘿,作为Flask-SQLAlchemy的新手,你的问题其实挺典型的——有时候我们确实需要用到原生的cursor来执行一些自定义SQL操作。答案是可以通过你创建的db对象间接获取cursor,虽然没有一步到位的直接方法,但步骤很简单:

方法一:通过Engine和Connection逐步获取

你可以先从db对象拿到SQLAlchemy的Engine实例,再获取连接,最后拿到cursor:

# 获取SQLAlchemy的Connection对象
conn = db.engine.connect()
# 获取底层DBAPI标准的cursor
cursor = conn.connection.cursor()

# 示例:执行原生SQL查询
cursor.execute("SELECT * FROM your_table_name")
results = cursor.fetchall()

# 记得用完后手动关闭资源(或者用下文的上下文管理器)
cursor.close()
conn.close()

方法二:更简洁的写法

如果想少写一行代码,也可以直接调用raw_connection()获取底层DBAPI连接,再生成cursor:

# 直接获取底层连接并生成cursor
cursor = db.engine.raw_connection().cursor()

# 示例:执行插入操作并手动提交事务
cursor.execute("INSERT INTO your_table (col1) VALUES ('test_data')")
cursor.connection.commit()

# 关闭资源
cursor.close()

实用小提示

  • 推荐使用上下文管理器来自动管理连接和cursor的生命周期,避免资源泄漏:
with db.engine.connect() as conn:
    with conn.connection.cursor() as cursor:
        cursor.execute("SELECT * FROM your_table")
        results = cursor.fetchall()
        # 在这里处理查询结果
  • 虽然原生cursor能满足特殊场景的需求,但SQLAlchemy的ORM和Core API已经能覆盖大部分常规操作,如果不是必须使用原生SQL,优先用ORM查询会更安全、更符合框架设计逻辑~

内容的提问来源于stack exchange,提问作者user3462649

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:05:32