简介:当你在使用 SQLAlchemy 进行数据库操作时,可能会遇到 `sqlalchemy.exc.ObjectNotExecutableError: Not an executable object` 错误。这个错误通常意味着你尝试执行的查询或命令不是可执行的。以下是一些解决此问题的方法。
当你使用 SQLAlchemy 进行数据库操作时,可能会遇到 sqlalchemy.exc.ObjectNotExecutableError: Not an executable object 错误。这个错误通常意味着你尝试执行的查询或命令不是可执行的。以下是解决此问题的一些方法:
query.statement.compile() 方法来检查查询是否已编译。
from sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import selectBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)engine = create_engine('sqlite:///')
Base.metadata.create_all(engine)session = sessionmaker(bind=engine)Session = session() # 创建会话对象user = User(name='John') # 创建 User 对象Session.add(user) # 将 User 对象添加到会话中Session.commit() # 提交会话,将数据保存到数据库# 查询已编译的示例代码:sql = select([User]).where(User.name == 'John') # 创建查询对象sql = sql.compile() # 编译查询对象print(sql) # 输出编译后的 SQL 语句
sql = select([User]).where(User.name == 'John') # 创建查询对象sql = sql.params(name='John') # 设置参数值sql = sql.compile() # 编译查询对象print(sql) # 输出编译后的 SQL 语句
Session.execute() 方法来执行查询或命令。如果你尝试使用其他方法来执行查询或命令,可能会导致这个错误。通过遵循这些方法,你应该能够解决
sql = select([User]).where(User.name == 'John') # 创建查询对象session = sessionmaker(bind=engine) # 创建会话对象Session = session() # 创建会话对象result = Session.execute(sql) # 使用 Session 的 execute 方法执行查询对象print(result.scalar()) # 输出查询结果中的第一个元素
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object 错误,并成功执行你的 SQLAlchemy 查询或命令。