关于Python数据爬取数据库出现sqlite3.OperationalError: near “s“: syntax error

1.出现的问题:

这几天在学习python的数据获取,而爬的数据是豆瓣的top250的250部电影的部分信息,在将所有的数据的信息存入数据库的movie250表时出现错误,如下图所示:

在这里插入图片描述
我发现一共有250条电影的数据,录入到第八个的时候就报错了,如下图:
在这里插入图片描述
因此可以推断出是在执行第八部电影的sql语句:cur.execute(sql)出现问题。打印每行的sql语句,调试到第八部电影停止,如下图所示
在这里插入图片描述
感觉是sql语句的问题,就把第八部电影的sql语句放到数据库console中执行一下,果然是sql语句的错误:
在这里插入图片描述
仔细观察sql语句发现:原来是 单引号 的使用不当导致的

insert into movie250 (info_link,pic_link,c_name,e_name,score,rated,intro,info) values ('https://movie.douban.com/subject/1295124/','https://img2.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg','辛德勒的名单','  Schindler's List','9.5','834850','拯救一个人,就是拯救整个世界 ','导演: 史蒂文·斯皮尔伯格 Steven Spielberg   主演: 连姆·尼森 Liam Neeson...1993  美国  剧情 历史 战争')

在数据中有一项:电影英文名:’ Schindler’s List’,原先是 Schindler’s List是个整体,但是由于数据的内部有个 导致单引号匹配不一致。

2.解决办法

只要把’ Schindler’s List’ 修改为 " Schindler’s List" ,内部的独立的单引号就不会和外面的双引号匹配了。

# 5.存储数据 ---- DataBase
def save_data2(datalist, db_path):
    # 4.1 好歹有个数据库
    init_db(db_path)

    # 插入动态的数据
    conn = sqlite3.connect(db_path)
    cur = conn.cursor()

    for data in datalist:
        for index in range(len(data)):
            # 将一行电影的每一项都用双引号括起来 --- !!!之前用单引号报错
            # data[index] = "'" + data[index] + "'"  ----> 之前报错了!!
            data[index] = '"' + data[index] + '"'

        sql = '''
                insert into movie250 (info_link,pic_link,c_name,e_name,score,rated,intro,info) values (%s)   
            ''' % (",".join(data))
        print(sql)
        cur.execute(sql)
        conn.commit()
    cur.close()
    conn.close()

删除之前的数据库,再次运行程序查看:
控制输出正常,所有数据录入到数据库的movie250表中。
在这里插入图片描述
查看数据库中movie250表,也打印到250部停止:
在这里插入图片描述

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值