gpt4 book ai didi

python - 将字典附加到 mysql 表时出错

转载 作者:行者123 更新时间:2023-11-29 02:09:33 25 4
gpt4 key购买 nike

我正在查询 mysql 数据库中的一个表,并想将结果附加到同一数据库中的另一个表,但我遇到了一个我似乎无法摆脱的错误。

到目前为止我已经

  • 在 mysql 数据库中连接并执行了一个 sql 查询
  • 将结果保存到 pandas 数据框中
  • 尝试使用 to_sql 然后抛出一个模块错误其他一些错误...
  • 下一步将数据框转换为字典
  • 尝试将字典附加到 mysql 表

代码:

import pymysql
import pandas as pd

dbServerName = "..."
dbUser = "..."
dbPassword = "..."
dbName = "..."

connObject = pymysql.connect(dbServerName, dbUser, dbPassword, dbName)
sqlQuery = """select id, uniqueUserId, time from searchResult where time>'2018-02-01' and time<'2018-03-2' limit 5"""
df = pd.read_sql(sqlQuery, connObject)
df['time'] = df['time'].astype(str)
# df.to_sql('test', con=conn, if_exists='append')
dfDict = df.to_dict(orient='list')

cursor = connObject.cursor()
table = 'test'
placeholders = ', '.join(['%s'] * len(dfDict))
columns = ', '.join(dfDict.keys())
sql = "INSERT INTO %s (%s) VALUES (%s)" % (table, columns, placeholders)
cursor.execute(sql, list(dfDict.values()))

我希望代码将字典附加到名为“test”的表中。但是我收到了以下错误消息:

---------------------------------------------------------------------------
InternalError Traceback (most recent call last)
<ipython-input-39-86395db9a7b9> in <module>
4 columns = ', '.join(dfDict.keys())
5 sql = "INSERT INTO %s (%s) VALUES (%s)" % (table, columns, placeholders)
----> 6 cursor.execute(sql, list(dfDict.values()))

InternalError: (1241, 'Operand should contain 1 column(s)')

dfDict 内容看起来像这样:

{'id': [39457,
39458,
39459,
39460,
39461,
...],
'time': ['2018-03-01 00:00:05',
'2018-03-01 00:00:09',
'2018-03-01 00:00:10',
'2018-03-01 00:00:15',
'2018-03-01 00:00:17',
...],
'uniqueUserId': ['123abc-x123-y123-z123-1234567xyz',
'123abc-x1415-y3264-z1343-13452xyz',
'3413dgwe-x1143-124124-4214af-125wfag',
'lk23h5l-l23k5h-2l3jk4-l15h-1po5j',
'a987sfa-23kh4-n21m4nb1-1j5lkj2b3-kho7v62o',
...]}

其他信息:

  • python 3.7.3
  • Mac 操作系统 Mojave 10.14
  • MySQL 5.6.33-0ubuntu0.14.04.1

关于我做错了什么有什么想法吗?

最佳答案

你的最后一行应该是:

cursor.executemany(sql, args)

args 是这样计算的:

v = list(dfDict.values())
args = [[v[j][i] for j in range(len(v))] for i in range(len(v[0]))]

参数的产量:

[[39457, '2018-03-01 00:00:05', '123abc-x123-y123-z123-1234567xyz'], [39458, '2018-03-01 00:00:09', '123abc-x1415-y3264-z1343-13452xyz'], ...

关于python - 将字典附加到 mysql 表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com