怎么把DF表的数据导入MySQL中?
DF表:
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
你的代码中有一个错误,应该是 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即可解决问题。