首页 > 解决方案 > 使用 pandas 数据框将数据写入 postgresql 时出错

问题描述

我正在尝试将 csv 列值保存在 postgres 数据库中。我使用熊猫来获取 csv 列值。但是每当我尝试将列值保存在我的数据库表列中时,都会出现错误。这是我的代码:

import pandas as pd

file = request.files['csvFile[]']
print('file.filename: ',file.filename)
jh = pd.read_csv(file, dtype={"name": str})
names = jh.name
print(names)

user = GenderInfo(name=jh.name)
db.session.add(user)
db.session.commit()

这是打印后的结果

名称=jh.name

在此处输入图像描述

我经常收到错误

“系列”对象是可变的,因此它们不能被散列

我在谷歌上搜索了这个问题,但我无法解决这个问题。如果有任何其他方法可以将 csv 列数据保存在数据库列中,我们将不胜感激。

标签: pythonpandaspostgresqlcsv

解决方案


完成!这是代码

def upload_cs():
    file = request.files['excelFile[]']
    stream = io.StringIO(file.stream.read().decode("UTF8"), newline=None)
    csv_input = csv.DictReader(stream)

    # Validate and deserialize input
    data, errors = genderInfoDto.load(file)

    print('data: ', data)


    for row in csv_input:
        jh = GenderInfo.query.filter_by(name=row['name']).first()
        print('GenderInfo: ', jh)
        if jh:
            return Response(json.dumps({'status': 'failed', 'message': 'gender already exists.'}), status=200,
                            mimetype='application/json')
        print(row['name'])
        user = GenderInfo(row['name'])
        db.session.add(user)
        db.session.commit()
    result = genderInfoDto.dump(user).data
    stream.seek(0)

    return Response(json.dumps({'status': 'success', 'message': 'file upload successfully  .', 'data': result}),
                    status=200, mimetype='application/json')

推荐阅读