【问题标题】:Insert List of tupels in mysql Db using python使用python在mysql Db中插入元组列表
【发布时间】:2020-05-08 18:39:13
【问题描述】:

我正在尝试将从 csv 文件中获得的带有数字的元组列表插入到我的 MySQL 数据库中。

我的代码:

readcsv = pd.read_csv( "***********************.csv", skiprows=45, sep=";")
cols = str(readcsv.columns.values.tolist()).replace('[','').replace(']', '').replace('\'','`')
for i in range(0, readcsv.shape[0], 1):
    values = str(readcsv.iloc[i:i+1].values.tolist()).replace('[', '(').replace(']', ')').replace('((', '(').replace('))', ')')


print(values)

conn = pymysql.connect(host='****', port=3306, user='root', passwd='*****', db='***')

cursor = conn.cursor()
rows = [values]

a = ','.join(map(str ,rows))
b = ','.join(map(str ,rows))
c =','.join(map(str ,rows))
d =','.join(map(str ,rows))

sql = "INSERT INTO csv_files.csv_file(ms, Power_in_W,Distance_in_mm,Force_in_N) VALUES ({},{},{},{})".format(a,b,c,d)

cursor.execute(sql)
conn.commit()
conn.close()

我已经在 mySQL 中使用列 MS、Power_in_W、Distance_in_mm、Force_in_N 创建了一个数据库。但不知何故,我无法将 csv 中的数据插入其中。由于错误:

pymysql.err.InternalError: (1241, '操作数应该包含 1 列')

我使用print(values) 得到的输出是:

(1.0, 0.0, 0.0, 0.0), (2.0, 60.3, 960.0, 0.0), (3.0, 60.3, 964.0,0.0), (4.0, 60.3, 967.0, 0.0), (5.0, 61.89, 964.0, 0.0), (6.0, 61.89, 967.0, 0.0), (7.0, 13.69, 962.0, 0.0)

...

有谁知道我做错了什么?

【问题讨论】:

  • 不是这里的主要问题点,但要小心数据库查询中的字符串格式以避免 sql 注入。 bobby-tables.com

标签: python mysql csv


【解决方案1】:

知道了。 - 问题解决了。 仅使用参数 a ,更改了我的 MS 值的大小,最后但并非最不重要的是,我将所有内容都放入了 for 循环。

【讨论】:

    【解决方案2】:

    使用execute_many 方法,并将值作为参数传递。

    sql = "INSERT INTO csv_files.csv_file(ms, Power_in_W,Distance_in_mm,Force_in_N) VALUES (%s, %s, %s, %s)"
    
    cursor.executemany(sql, values)
    

    【讨论】:

    • 现在我得到了另一个 Traceback: TypeError: not enough Arguments for Format string
    • 值应该是序列的序列,你可以把值读到某个列表中,而不是str吗?
    • 抱歉,我不明白您所说的“将值读入某个列表,而不是 str?”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2019-04-08
    • 2017-06-19
    • 2022-11-21
    • 2021-11-02
    • 2013-05-21
    • 2012-05-08
    相关资源
    最近更新 更多