【问题标题】:Keep getting tuple error when inserting into rds database插入rds数据库时不断收到元组错误
【发布时间】:2021-12-09 12:43:12
【问题描述】:

我有一个数据框,我正在尝试循环以将数据插入到一个和 rds 数据库中,我的 aws-lambda 函数返回了以下错误:

[ERROR] AttributeError: 'tuple' 对象没有属性 'user_id'

我的代码很简单,我从 s3 存储桶中读取一个文件,对其进行解码,将其读入内存并循环遍历每一行。

mycsv = client.get_object(Bucket = aml_bucket, Key = file_name)
bc_body = mycsv['Body']
csv_string = bc_body.read().decode('utf-8')
df = pd.read_csv(StringIO(csv_string))
for row in df.iterrows():
  cursor.execute('''insert into new_table(user_id, first_name)
  VALUES(?,?)'''
  row.user_id,
  row.first_name)

我已将其从我的 s3 中删除并在本地运行以进行打印,它会打印值。我从第 6 行开始打印值。当我尝试将它插入到表中时,它在我的 lambda 函数中掉了下来。请帮忙

【问题讨论】:

  • iterrows() 返回一个元组 (row_index, row)。在迭代期间拆分它for index, row in df.iterrows():
  • 我必须在 for 循环中调用 index 吗?
  • 您不需要使用index,只需解压即可。目前row实际上是(row_index, actual_row)所以index, row = (row_index, actual_row)
  • 我不明白,你介意给我举个例子吗?
  • for row in df.iterrows() 替换为for index, row in df.iterrows():。什么都不改变..

标签: python sql-server aws-lambda amazon-rds


【解决方案1】:

错误清楚地表明了您的代码中的问题,您必须像这样更新代码

for index, row in df.iterrows():
  cursor.execute('''insert into new_table(user_id, first_name)
  VALUES(?,?)'''
  row['user_id'],
  row['first_name'])

假设 DF 被定义为具有 user_id 和 first_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 2015-10-31
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2019-08-19
    • 2016-06-04
    相关资源
    最近更新 更多