SQLAlchemy 2.0是否支持执行LOCK TABLE锁表语句?
SQLAlchemy 2.0执行LOCK TABLE的方法
SQLAlchemy 2.0没有专门封装LOCK TABLE的ORM级工具,但完全支持通过text()构造原生SQL来执行这类锁表语句,这也是最直接的实现方式。
你提供的示例存在一个关键问题:每次调用create_engine().connect()都会创建全新的数据库连接,而表锁是绑定在单个连接上的,跨连接执行的话,锁不会对后续的DELETE/INSERT操作生效,所有操作也不在同一事务上下文里。
正确的写法应该复用同一个连接,在同一事务内完成所有操作:
# 初始化引擎(建议全局只初始化一次) engine = create_engine("你的数据库连接URL") # 使用上下文管理器确保连接正确释放 with engine.connect() as conn: # 执行锁表语句 conn.execute(text("LOCK TABLE table_name")) # 执行删除操作 conn.execute(text("DELETE FROM table_name WHERE 条件")) # 执行插入操作 conn.execute(text("INSERT INTO table_name (列1, 列2) VALUES (值1, 值2), (值3, 值4)")) # 提交事务 conn.commit()
如果使用ORM Session,同样可以在同一个Session上下文里执行锁表语句,确保所有操作共享同一连接:
from sqlalchemy.orm import Session engine = create_engine("你的数据库连接URL") with Session(engine) as session: # 执行锁表 session.execute(text("LOCK TABLE table_name")) # 这里可以混合执行ORM操作,比如: # session.query(你的模型类).filter(你的模型类.id == 1).delete() # session.add(你的模型类(列1=值1, 列2=值2)) session.commit()
内容的提问来源于stack exchange,提问作者AnthonyGP
相关产品推荐
相关产品推荐

