python - SQLAlchemy TypeError: ('Params must be in a list, tuple, or Row', 'HY000')
问题描述
我有一个使用 sqlalchemy 的方法
def insert_amended_values(self, data):
insert_stmt = """INSERT INTO amended (date, volume, price, updated)
VALUES (%(date)s, %(volume)s, %(price)s, %(updated)s);"""
crsr = self.connection.engine.raw_connection().cursor()
crsr.executemany(insert_stmt, data)
哪个是字典列表的数据,例如
[
{'date': '2020-06-27', 'volume': '30', 'price': 50, 'updated': '2020-10-21 17:17:50'},
{'date': '2020-06-28', 'volume': '32', 'price': 48, 'updated': '2020-10-21 17:17:50'},
{'date': '2020-06-29', 'volume': '26', 'price': 56, 'updated': '2020-10-21 17:17:50'}
]
但我得到了错误TypeError: ('Params must be in a list, tuple, or Row', 'HY000')
如何在保留参数化查询的同时将字典列表转换为列表或行列表?
谢谢
解决方案
将您的数据保留在list
of 中dict
,将您的 SQL 语句包装在 SQLAlchemytext
对象中并使用:name
参数样式
import sqlalchemy as sa
# …
def insert_amended_values(self, data):
insert_stmt = sa.text("""INSERT INTO amended (date, volume, price, updated)
VALUES (:date, :volume, :price, :updated);""")
with self.connection.engine.begin() as conn:
conn.execute(insert_stmt, data)
推荐阅读
- flutter - Flutter 如何使用 path_provider 获取本地下载文件夹
- windows - Steam 桌面验证器,mafiles 已加密
- typescript - 如何从泛型实例中获取目标类名?
- .net-core - 从 NuGet 包中排除目标框架
- azure-ad-b2c - 在 AzureB2C 自定义策略中调整电子邮件验证用户界面
- r - R:用连续的0替换字符串,然后用1替换三个
- sql - 使用数据库事务确保只有一个进程从作业表中获取作业
- java - RxJava Publisher 到 Pojo 以获取 json 响应
- django - Django translation.activate() - 在哪里这样做以及如何调试?
- python - KivyMD (Python) - 导航抽屉 - 按钮突出显示