liujuanjuan1984 / ucanuupnobb

you can you up, no bb. 自学 python 编程过程中的挑战、笔记及我的践友们。
17 stars 9 forks source link

【笔记】pandas.to_sql()失败,遇到 pandas.io.sql.DatabaseError:1146 提示表格不存在的解决办法 #16

Closed liujuanjuan1984 closed 4 years ago

liujuanjuan1984 commented 5 years ago

在写我的爬虫脚本 csdn_my_article 时,遇到一处报错:

image

pandas.io.sql.DatabaseError: Execution failed on sql 'select * from csdn_my_article;': (1146, "Table 'zhihuclawer.csdn_my_article' doesn't exist")

相关的代码是:


pd.io.sql.to_sql(article_df, "csdn_my_article", conn, if_exists='append', index=False)

因为该爬虫脚本是首次运行,mysql 中并没有该table,在执行上述语句时,将会自动创建新表格。但显然,创建新表格遇到问题,导致创建表格失败。

经检查,失败的原因是:

    attn = r'some_(.*?)attn_(.*?)desct_(.*?)'
    result = re.findall(attn,html_text,re.S)
    if result:
        article_df = pd.DataFrame(result,columns=['some_columns','title_list'])

我在执行该脚本之前,曾修改正则匹配式 attn里的描述,导致多抓取一个变量,但在定义 article_df 这个 pandas dataframe数据时,忘记定义该参数的 columns 名称。从而导致正则匹配拿到的每项结果的参数个数,比 dataframe 所定义的 columns 个数要多。最终导致接下来to_sql() 执行失败。

columnslist 中增加对应的 columns ,果然能正常执行。