Python sqlalchemy:使用参数绑定执行原始sql

Python sqlalchemy:使用参数绑定执行原始sql,python,sqlalchemy,database-migration,flask-sqlalchemy,alembic,Python,Sqlalchemy,Database Migration,Flask Sqlalchemy,Alembic,我正在尝试使用SQLALchemy(在alembic脚本中)的参数运行这个简单的原始sql语句: 我得到以下错误: sqlalchemy.exc.StatementError: A value is required for bind parameter 'description' (original cause: InvalidRequestError: A value is required for bind parameter 'description') "insert in

我正在尝试使用SQLALchemy(在alembic脚本中)的参数运行这个简单的原始sql语句:

我得到以下错误:

sqlalchemy.exc.StatementError: A value is required for bind parameter 
  'description' (original cause: InvalidRequestError: A value is required for 
  bind parameter 'description') "insert into field_tags (id, field_id, code, 
  description) values (1, 'math', 
  %(code)s ,%(description)s)" []

解决方案:

t = {"code": "123", "description": "one two three"}
from sqlalchemy.sql import text

op.get_bind().execute(text("insert into field_tags (id, field_id, code, description) "+
               "values (1,'zasz', :code ,:description')"), **t)
您需要获取对象,调用它并将查询参数作为关键字参数传递:

from alembic import op
from sqlalchemy.sql import text

conn = op.get_bind()
conn.execute(
    text(
        """
            insert into field_tags 
            (id, field_id, code, description) 
            values 
            (1, 'zasz', :code , :description)
        """
    ), 
    **t
)

另请参见:。

我尝试了这个方法(将**t作为参数传递),得到了:TypeError:execute()得到了一个意外的关键字参数'code'@MaxL.,我的错,你能试试更新答案中的代码吗?想法是获取连接对象并对其调用
execute()
。谢谢,这很有帮助,我必须做另一个更改:查询必须由文本函数包装(来自sqlalchemy.sql import text),答案为+1,如果您添加了text()包装,(就像我上面的更新一样)我接受它作为最终答案。解决方案几乎是正确的。它仍然会出现“获取意外关键字参数”错误。将“**t”更改为“t”,它就可以工作。@AneilMallavarapu注意,
execute(..)
from与or引擎中的不同。
from alembic import op
from sqlalchemy.sql import text

conn = op.get_bind()
conn.execute(
    text(
        """
            insert into field_tags 
            (id, field_id, code, description) 
            values 
            (1, 'zasz', :code , :description)
        """
    ), 
    **t
)