我正在尝试在冗长的插入查询中使用位置参数。但它似乎不允许使用位置参数。我正在使用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)"
由于实际查询要大得多,我不喜欢使用字典/命名参数
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
属性访问引擎。