python - 在 SQLAlchemy 中使用字典/数据框值执行更新
问题描述
我正在尝试更新user_id
并date_synced
在我的 user_table 中。我正在使用 MySQL。我的表如下:User(user_id, mail, active, activity_level, date_synced)
。这些值来自我的 DataFrameUsers:
user_id date_synced
1 2019-05-20 20:48:04
8 2019-05-20 20:48:04
转换为 dict dictUsers = dfUsers.to_dict()
:
{'date_synced': {1: '2019-05-20 20:48:04', 8: '2019-05-20 20:48:04'}}
当我执行:
conn.execute(user_table.update(), [
dictUsers
]
)
我得到错误:
ProgrammingError: (pymysql.err.ProgrammingError) (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'1: "\'2019-05-20 20:48:04\'", 8: "\'2019-05-20 20:48:04\'"}\' at line 1')
[SQL: UPDATE `User` SET date_synced=%(date_synced)s]
[parameters: {'date_synced': {1: '2019-05-20 20:48:04', 8: '2019-05-20 20:48:04'}}]
预期结果将在数据库中更新。
如何使用 SQLAlchemy 插入此字典?不必是字典,可以转换。我只是想让它工作。谢谢!
解决方案
您的参数格式错误。sqlalchemy
现在不知道如何搜索行和更新什么。正确格式:
[
{'user_id': 1, 'date_synced': '2019-05-20 20:48:04'},
{'user_id': 8, 'date_synced': '2019-05-20 20:48:04'}
]
所以你只需要转换dictUsers
. 只是一个例子:
from sqlalchemy.sql.expression import bindparam, update
from sqlalchemy.sql.expression import func
data = {'date_synced': {1: '2019-05-20 20:48:05', 2: '2019-05-20 20:48:05'}}
params = []
for user_id, date_synced in data['date_synced'].items():
params.append({'_id': user_id, 'date_synced': date_synced})
stmt = update(User).\
where(User.user_id == bindparam('_id')).\
values({
'date_synced': bindparam('date_synced'),
})
db.session.execute(stmt, params)
db.session.commit()
希望这可以帮助。
推荐阅读
- python - 使用 .apply() 方法时在最后一次迭代后获取 ValueError
- r - R:动画值向量
- c++ - 如何在放置 .cpp 文件的目录中创建目录?
- pandas - 将术语-文档矩阵限制为最常见的一元组
- c# - 如何使用 Bing 地图检索邮政地址的纬度和经度?
- javascript - 为什么 React.memo 没有按预期工作?
- python-3.x - 正则表达式中缺少前导或尾随空格会使搜索无效
- c# - 如何在 uwp 中使用 DoubleToVisibilityConverter
- vertica - 为什么我需要 3 个节点来实现 k 安全值 1
- java - 在 SQL SERVER 中存储来自 Java 的日期和时间