sqlalchemy session.execute 带有位置参数错误

问题描述 投票:0回答:1

我正在尝试在冗长的插入查询中使用位置参数。但它似乎不允许使用位置参数。我正在使用mysql。下面是错误

sqlalchemy.exc.ArgumentError: List argument must consist only of tuples or dictionaries

带有占位符的示例查询

        query = "insert into test values(?,?,?)" 
        values = (1,2,3) 

尝试过

        connection = session.connection()
        result = connection.execute(text(query), *values)

        result = session.execute(text(query), *values)

        result = connection.execute(text(query), values)

        result = session.execute(text(query), values)

        changed placeholder.
        query = "insert into test values(%s,%s,%s)" 

由于实际查询要大得多,我不喜欢使用字典/命名参数

python sqlalchemy
1个回答
0
投票

SQLALchemy 2.0+ 对于会话或连接的执行方法不支持此功能。但是,可以使用连接的 exec_driver_sql 方法,就像直接使用 DB-API 游标执行查询一样。

将 sqlalchemy 导入为 sa

engine = sa.create_engine('mariadb+pymysql:///test', echo=True)
tbl = sa.Table('users', sa.MetaData(), autoload_with=engine)

q = """SELECT id, name FROM users WHERE id = %s or name = %s"""

with engine.connect() as conn:
    rows = conn.exec_driver_sql(q, (1, 'Bob'))
    for row in rows:
        print(row)

如果您使用会话,则可以通过会话的

bind
属性访问引擎。

© www.soinside.com 2019 - 2024. All rights reserved.