python - sqlalchemy : executing raw sql with parameter bindings

标签 python sqlalchemy database-migration flask-sqlalchemy alembic

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

from alembic import op

t = {"code": "123", "description": "one two three"}

op.execute("insert into field_tags (id, field_id, code, description) "+
               "values (1,'zasz', :code ,:description')", t)

我收到以下错误:

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)

最佳答案

您需要获取 connection对象,请调用 execute()在其上并将查询参数作为关键字参数传递:

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
)

另见:How to execute raw SQL in SQLAlchemy-flask app .

关于python - sqlalchemy : executing raw sql with parameter bindings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206562/

相关文章:

python - 在 python 中“合并”两个对象

python - 使用sqlalchemy和mysql-python,如何设置charset=utf8mb4?

python - 在 sqlalchemy 中触发

python - Django:模型 OneToOneField 与用户无法添加默认值

oracle - 错误:ORA-06550:第4行,第205列:PLS-00103:在预期以下情况之一时遇到了符号 “end-of-file”:

python - 如何根据列中的列表元素对数据框进行分组

python - 在 scipy 中指定大于不等式

php - 无法在 Laravel 中添加外键约束

python - 使用 pip 安装factory_boy 时遇到问题

python - 将 Celery 与 SQLAlchemy 和 Pyramid 结合使用