如何从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
相关产品推荐
相关产品推荐

