<p>很难理解您从提供的代码摘录中到底想要实现什么。但我会试着猜的。所以下面的答案将基于我的猜测。</p>
<p>第4行-从模块中导入内容(DBSession、SmsDelivery、SmsMessagePart),然后尝试像在应用程序中那样操作这些对象。</p>
<p>错误显示SmsDelivery是一个映射器对象,因此它指向某个表。映射器对象应该绑定到有效的sqlalchemy连接。</p>
<p>它告诉我,您跳过了数据库对象的初始化(连接并将此连接绑定到映射器对象),就像您在应用程序代码中通常做的那样。</p>
<p>DBSession看起来像SQLAlchemy会话对象-它也应该有连接绑定。</p>
<p>Alembic已经准备好并打开了连接-用于更改您正在使用op.*方法请求的数据库架构。</p>
<p>所以应该有办法得到这种联系。</p>
<p>根据Alembic manual op.get_bind()将返回当前连接绑定:<br/>
要与连接的数据库进行完全交互,请使用上下文中提供的“绑定”:</p>
<pre><code>from alembic import op
connection = op.get_bind()
</code></pre>
<p>因此,您可以使用此连接将查询运行到数据库中。</p>
<p>另外,我假设您想对表中的数据进行一些修改。您可以尝试将此修改表述为一个更新查询。Alembic有特殊的方法来执行这些更改,因此您不需要处理连接。<br/>
<a href="http://alembic.zzzcomputing.com/en/latest/ops.html?highlight=execute#alembic.operations.Operations.execute" rel="noreferrer">alembic.operations.Operations.execute</a></p>
<pre><code>execute(sql, execution_options=None)
</code></pre>
<p>使用当前迁移上下文执行给定的SQL。</p>
<p>在SQL脚本上下文中,语句直接发送到输出流。但是,没有返回结果,因为此函数的目标是生成可以在“脱机”模式下运行的更改脚本。</p>
<p>参数:sql–任何合法的SQLAlchemy表达式,包括:</p>
<ul>
<li>字符串sqlalchemy.sql.expression.text()构造。</li>
<li>sqlalchemy.sql.expression.insert()构造。</li>
<li>一个sqlalchemy.sql.expression.update()</li>
<li>sqlalchemy.sql.expression.insert(),或</li>
<li>sqlalchemy.sql.expression.delete()构造。几乎任何东西
这是SQL表达式语言教程中描述的“可执行文件”。</li>
</ul>