怎么把DF表的数据导入MySQL中?

怎么把DF表的数据导入MySQL中?
DF表:

img

import pymysql
import pandas
db = pymysql.connect(host='localhost', port=3306, user='root', password='', db='test')
cur = db.cursor()
sql = "INSERT INTO test_table (ts_code, trade_date, open, close) VALUES (%s,%s,%s,%s)"
cursor.execute(sql,((df1['ts_code'], df1['trade_date'], df1['open'], df1['close'])))
db.commit()
cur.close()
db.close()

报错:Cursor closed

ProgrammingError                          Traceback (most recent call last)
Input In [44], in <cell line: 4>()
      2 cur = db.cursor()
      3 sql = "INSERT INTO test_table (ts_code, trade_date, open, close) VALUES (%s,%s,%s,%s)"
----> 4 cursor.execute(sql,(df1['ts_code'], df1['trade_date'], df1['open'], df1['close']))
      5 db.commit()
      6 cur.close()
ProgrammingError: Cursor closed

我的wampserver在正常运行,也在游览器打开了phpmysql

img

你的代码中有一个错误,应该是 cur.execute() 而不是 cursor.execute(),因为你已经将 cursor 对象赋值给了变量 cur。

正确的代码应该是:

import pymysql
import pandas

db = pymysql.connect(host='localhost', port=3306, user='root', password='', db='test')
cur = db.cursor()

sql = "INSERT INTO test_table (ts_code, trade_date, open, close) VALUES (%s,%s,%s,%s)"
cur.executemany(sql, zip(df1['ts_code'], df1['trade_date'], df1['open'], df1['close']))
db.commit()

cur.close()
db.close()

这里使用了 executemany() 方法,可以一次性插入多行数据,同时使用了 zip() 函数将四个 Series 对象打包成一个可迭代的对象,方便传递给 executemany() 方法。

将第4行中的cursor改为cur即可解决问题。