我试图使用pymysql库插入数据框架。它给出了这个错误。
pymysql.err.ProgrammingError:(1064, "你的SQL语法有错误;请检查你的MySQL服务器版本对应的手册,在第1行''bestwebsites'('Rank','Score','Category','Audience','URL','Links','Desc')VALUE'附近查看正确的语法")
import pandas as pd
import re
# import sqlalchemy
import pymysql
df = pd.read_csv('final_data.csv')
df = df.drop(['blank','Unnamed: 0'], axis=1)
df['Desc']
df['Desc'] = df['Desc'].str.replace("[-',’]",'').astype(str)
df.columns
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='pythondb')
cursor = connection.cursor()
cols = "','".join([str(i) for i in df.columns.tolist()])
for i,row in df.iterrows():
sql = "INSERT INTO 'bestwebsites' ('" +cols+ "') VALUES (" + "%s,"*(len(row)-1) + "%s)"
cursor.execute(sql,list(row))
connection.commit()
connection.close()
我试着用sqlalchemy,它能用了
engine = sqlalchemy.create_engine('mysql+pymysql://root:root@localhost:3306/pythondb')
df.to_sql(name='bestwebsites',
con=engine,
index=False,
if_exists='replace')
列名(和表名)不应该用单引号包围。如果它们符合MySQL关于未引号标识符的规则,你可以使用unqote,或者使用反引号进行引号。
cols = "`,`".join([str(i) for i in df.columns.tolist()])
for i,row in df.iterrows():
sql = "INSERT INTO `bestwebsites` (`" +cols+ "`) VALUES (" + "%s,"*(len(row)-1) + "%s)"
cursor.execute(sql,list(row))
connection.commit()
connection.close()
侧面说明:执行所有的 insert
然后再提交--而不是每次插入后都提交。