SQL查询在插入表时出现了问题

问题描述 投票:0回答:1

我试图使用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') 
python mysql sql sql-update pymysql
1个回答
1
投票

列名(和表名)不应该用单引号包围。如果它们符合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然后再提交--而不是每次插入后都提交。

© www.soinside.com 2019 - 2024. All rights reserved.